📄 l51_bank.lst
字号:
363 CONVBANKNO MACRO
364 SWAP A
365 ENDM
366 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
396 PUSH ACC
A51 MACRO ASSEMBLER L51_BANK 09/25/2008 19:29:40 PAGE 4
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
429+1 SELECT %CNT
445
446
447
448
449 ?BANK?SWITCH SEGMENT CODE PAGE
450
---- 451 RSEG ?BANK?SWITCH
0000 452 CNT SET 0
453
454 REPT ?B_NBANKS
455 SWITCH %CNT
456
457 CNT SET CNT+1
458 ENDM
459+1 SWITCH %CNT
472+1 SWITCH %CNT
485
486
ENDIF
516
517
518 ENDIF ; close block IF ?B_MODE = 0 *******************************************
519
520
ENDIF ; close block IF ?B_MODE = 1 *******************************************
762
763
ENDIF ; close block IF ?B_MODE = 4 *******************************************
836
---- 837 RSEG ?BANK?SELECT
838
839 ;************************ SWITCHBANK FUNCTION *******************************
840 ; *
841 ; SWITCHBANK allows use of bank-switching for C programs *
842 ; *
843 ; prototype: extern switchbank (unsigned char bank_number); *
844 ; *
845 ;******************************************************************************
846 PUBLIC _SWITCHBANK, ?B_SWITCHBANK_A
847
0024 EF 848 _SWITCHBANK: MOV A,R7
849
850 IF ?B_MODE = 0 ;**************************************************************
851
0025 852 ?B_SWITCHBANK_A:
ENDIF
857
858 IF ?B_NBANKS <= 16 AND ?B_RTX = 0
A51 MACRO ASSEMBLER L51_BANK 09/25/2008 19:29:40 PAGE 5
0025 C4 859 SWAP A
0026 03 860 RR A
861 ENDIF
0027 900000 F 862 MOV DPTR,#?BANK?SWITCH
002A 73 863 JMP @A+DPTR
864
865 ENDIF ; close block IF ?B_MODE = 0 *******************************************
866
ENDIF ; close block IF ?B_MODE = 1 *******************************************
882
ENDIF ; close block IF ?B_MODE = 4 *******************************************
912
913
ENDIF ; close block IF ?B_VAR_BANKING ****************************************
1326
A51 MACRO ASSEMBLER L51_BANK 09/25/2008 19:29:40 PAGE 6
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?BANK?SELECT . . . C SEG 002BH 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 0012H R SEG=?BANK?SELECT
?B_CURRENTBANK . . D ADDR 0090H A
?B_FACTOR. . . . . N NUMB 0080H A
?B_FIRSTBIT. . . . N NUMB 0007H A
?B_MASK. . . . . . N NUMB 0080H A
?B_MODE. . . . . . N NUMB 0000H A
?B_NBANKS. . . . . N NUMB 0002H A
?B_PORT. . . . . . D ADDR 0090H 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 0025H 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 0080H 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. . . . . . . . . ---- -----
P1 . . . . . . . . D ADDR 0090H A
SAVEA. . . . . . . ---- -----
_SWITCHBANK. . . . C ADDR 0024H 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 + -