📄 l51_bank.lst
字号:
344
ENDIF
351
ENDIF
357
358
359 ; Macro code to select the 'N'
360 SWITCH MACRO N
361 ORG N * 8
362 PUBLIC ?B_SWITCH&N
363 ?B_SWITCH&N:
364 IF N <> 0
365 ORL ?B_CURRENTBANK,#?B_MASK
366 ENDIF
367 IF N <> (?B_NBANKS-1)
368 ANL ?B_CURRENTBANK,#(BANK&N OR NOT ?B_MASK)
369 ENDIF
370 RET
371 ENDM
372
373 ENDIF
374
375
376 SELECT MACRO N
377 LOCAL XLABEL, YLABEL
378
379 PUBLIC ?B_BANK&N
380 ?B_BANK&N:
381 MOV A,?B_CURRENTBANK
382 ANL A,#?B_MASK
383 CONVBANKNO ; Convert Bank Number to Address
384 PUSH ACC
385 MOV A,#HIGH ?BANK?SWITCH
386 PUSH ACC
A51 MACRO ASSEMBLER L51_BANK 02/21/2005 09:48:31 PAGE 4
387 PUSH DPL
388 PUSH DPH
389 LJMP ?B_SWITCH&N
390 ENDM
391
392
393 ?BANK?SELECT SEGMENT CODE
394
---- 395 RSEG ?BANK?SELECT
0000 396 CNT SET 0
397
398 REPT ?B_NBANKS
399 SELECT %CNT
400 CNT SET CNT+1
401
402 ENDM
403+1 SELECT %CNT
420+1 SELECT %CNT
437
438
439
440
441 ?BANK?SWITCH SEGMENT CODE PAGE
442
---- 443 RSEG ?BANK?SWITCH
0000 444 CNT SET 0
445
446 REPT ?B_NBANKS
447 SWITCH %CNT
448
449 CNT SET CNT+1
450 ENDM
451+1 SWITCH %CNT
464+1 SWITCH %CNT
477
478
ENDIF
508
509
510 ENDIF ; close block IF ?B_MODE = 0 *******************************************
511
512
ENDIF ; close block IF ?B_MODE = 1 *******************************************
754
755
ENDIF ; close block IF ?B_MODE = 4 *******************************************
828
---- 829 RSEG ?BANK?SELECT
830
831 ;************************ SWITCHBANK FUNCTION *******************************
832 ; *
833 ; SWITCHBANK allows use of bank-switching for C programs *
834 ; *
835 ; prototype: extern switchbank (unsigned char bank_number); *
836 ; *
837 ;******************************************************************************
838 PUBLIC _SWITCHBANK, ?B_SWITCHBANK_A
839
0026 EF 840 _SWITCHBANK: MOV A,R7
841
842 IF ?B_MODE = 0 ;**************************************************************
843
0027 844 ?B_SWITCHBANK_A:
ENDIF
849
850 IF ?B_NBANKS <= 16 AND ?B_RTX = 0
A51 MACRO ASSEMBLER L51_BANK 02/21/2005 09:48:31 PAGE 5
0027 C4 851 SWAP A
0028 03 852 RR A
853 ENDIF
0029 900000 F 854 MOV DPTR,#?BANK?SWITCH
002C 73 855 JMP @A+DPTR
856
857 ENDIF ; close block IF ?B_MODE = 0 *******************************************
858
ENDIF ; close block IF ?B_MODE = 1 *******************************************
874
ENDIF ; close block IF ?B_MODE = 4 *******************************************
904
905
ENDIF ; close block IF ?B_VAR_BANKING ****************************************
1318
A51 MACRO ASSEMBLER L51_BANK 02/21/2005 09:48:31 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 0090H A
?B_FACTOR. . . . . N NUMB 0001H A
?B_FIRSTBIT. . . . N NUMB 0000H A
?B_MASK. . . . . . N NUMB 0001H 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 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 0001H 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 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 + -