📄 l51_bank.lst
字号:
0007 602 ?B_MASK EQU MASK
603
604 ?BANK?SELECT SEGMENT CODE
605 ?BANK?DATA SEGMENT DATA
---- 606 RSEG ?BANK?DATA
0000 607 ?B_CURRENTBANK: DS 1
608
609 BANK MACRO N
610 PUBLIC ?B_BANK&N
611 ?B_BANK&N:
612 PUSH ?B_CURRENTBANK
613 MOV A,#HIGH ?BANK?SWITCH
614 PUSH ACC
615 PUSH DPL
616 PUSH DPH
617 ENDM
618
619 SWITCH MACRO N
A51 MACRO ASSEMBLER L51_BANK 11/10/2006 13:38:49 PAGE 4
620 PUBLIC ?B_SWITCH&N
621 ?B_SWITCH&N:
622 MOV ?B_CURRENTBANK,#LOW ?B_SWITCH&N
623 SWITCH&N
624 RET
625 ENDM
626
627 ?BANK?SWITCH SEGMENT CODE PAGE
628
---- 629 RSEG ?BANK?SWITCH
630 ; Generate ?B_SWITCHn functions
0000 631 CNT SET 0
632
633 REPT ?B_NBANKS
634 BANK %CNT
635 SWITCH %CNT
636 CNT SET CNT+1
637 ENDM
638+1 BANK %CNT
646+1 SWITCH %CNT
656+1 BANK %CNT
664+1 SWITCH %CNT
674+1 BANK %CNT
682+1 SWITCH %CNT
693+1 BANK %CNT
701+1 SWITCH %CNT
711+1 BANK %CNT
719+1 SWITCH %CNT
729+1 BANK %CNT
737+1 SWITCH %CNT
747+1 BANK %CNT
755+1 SWITCH %CNT
765+1 BANK %CNT
773+1 SWITCH %CNT
783
ENDIF
787
788
789 ;---- Initialization of ?B_CURRENTBANK and execution of SWITCH0:
790 ;?C_C51STARTUP?1 SEGMENT CODE
791 ; RSEG ?C_C51STARTUP?1
792 ; CLR A
793 ; MOV ?B_CURRENTBANK,A ; Init Current Bank
794 ; SWITCH0 ; Execute SWITCH0 Macro
795
796
797 COMMON_XDATA MACRO ; Switch back to common XDATA bank
798 SWITCH1 ; Switch to XDATA Bank 1
799 ENDM
800
801
802 ENDIF ; close block IF ?B_MODE = 4 *******************************************
803 ;?BANK?SELECT SEGMENT CODE
804
---- 805 RSEG ?BANK?SELECT
806
807 ;************************ SWITCHBANK FUNCTION *******************************
808 ; *
809 ; SWITCHBANK allows use of bank-switching for C programs *
810 ; *
811 ; prototype: extern switchbank (unsigned char bank_number); *
812 ; *
813 ;******************************************************************************
814 PUBLIC _SWITCHBANK
815
0000 EF 816 _SWITCHBANK: MOV A,R7
A51 MACRO ASSEMBLER L51_BANK 11/10/2006 13:38:49 PAGE 5
817
ENDIF ; close block IF ?B_VAR_BANKING <> 0 ***********************************
861
ENDIF ; close block IF ?B_MODE = 0 *******************************************
870
ENDIF ; close block IF ?B_MODE = 1 *******************************************
886
887
888 IF ?B_MODE = 4 ;**************************************************************
889
890 S_ENTRY MACRO N
891 DB LOW ?B_SWITCH&N
892 ENDM
893
0001 894 _SWITCHBANK_A:
0001 240A 895 ADD A,#switch_tab+3-$
0003 83 896 MOVC A,@A+PC
0004 900000 F 897 MOV DPTR,#?BANK?SWITCH
0007 73 898 JMP @A+DPTR
899
0008 900 switch_tab:
0000 901 CNT SET 0
902
903 REPT ?B_NBANKS
904 S_ENTRY %CNT
905 CNT SET CNT+1
906 ENDM
907+1 S_ENTRY %CNT
910+1 S_ENTRY %CNT
913+1 S_ENTRY %CNT
916+1 S_ENTRY %CNT
919+1 S_ENTRY %CNT
922+1 S_ENTRY %CNT
925+1 S_ENTRY %CNT
928+1 S_ENTRY %CNT
931 ENDIF ; close block IF ?B_MODE = 4 *******************************************
932
933
A51 MACRO ASSEMBLER L51_BANK 11/10/2006 13:38:49 PAGE 6
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 0010H REL=UNIT
?BANK?SWITCH . . . C SEG 0088H 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_BANK4 . . . . . C ADDR 0044H R SEG=?BANK?SWITCH
?B_BANK5 . . . . . C ADDR 0055H R SEG=?BANK?SWITCH
?B_BANK6 . . . . . C ADDR 0066H R SEG=?BANK?SWITCH
?B_BANK7 . . . . . C ADDR 0077H R SEG=?BANK?SWITCH
?B_COMMON_XRAM . . ---- -----
?B_CURRENTBANK . . D ADDR 0000H R SEG=?BANK?DATA
?B_FACTOR. . . . . N NUMB 0000H A
?B_FIRSTBIT. . . . N NUMB 0000H A
?B_INTR_ACCESS . . ---- -----
?B_MASK. . . . . . N NUMB 0007H A
?B_MODE. . . . . . N NUMB 0004H A
?B_NBANKS. . . . . N NUMB 0008H 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_SWITCH4 . . . . C ADDR 004EH R SEG=?BANK?SWITCH
?B_SWITCH5 . . . . C ADDR 005FH R SEG=?BANK?SWITCH
?B_SWITCH6 . . . . C ADDR 0070H R SEG=?BANK?SWITCH
?B_SWITCH7 . . . . C ADDR 0081H R SEG=?BANK?SWITCH
?B_VARBANKING. . . ---- -----
?B_VAR_BANKING . . N NUMB 0000H A
ACC. . . . . . . . D ADDR 00E0H A
B. . . . . . . . . D ADDR 00F0H A
CNT. . . . . . . . N NUMB 0008H 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 0007H A
N. . . . . . . . . ---- -----
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 + -