📄 l51_bank.lst
字号:
ENDIF
354
355 ; Macro code to select the 'N'
356 SWITCH MACRO N
357 ORG N * 4
358 PUBLIC ?B_SWITCH&N
359 ?B_SWITCH&N:
360 MOV R0,#(BANK&N OR NOT ?B_MASK)
361 IF ?B_NBANKS > 32
362 IF (N < 32)
363 SJMP SWITCHBNK_H
364 ELSEIF (N = 32)
365 SWITCHBNK_H:
366 SJMP SWITCHBNK
367 ELSEIF (N <> ?B_NBANKS-1)
368 SJMP SWITCHBNK
369 ENDIF
370 ELSE
371 IF N <> (?B_NBANKS-1)
372 SJMP SWITCHBNK
373 ENDIF
374 ENDIF
375
376 ENDM
377
378 ENDIF
379
380
ENDIF
451
452
453 SELECT MACRO N
454 LOCAL XLABEL, YLABEL
455
456 PUBLIC ?B_BANK&N
457 ?B_BANK&N:
458 MOV A,?B_CURRENTBANK
459 ANL A,#?B_MASK
460 CONVBANKNO ; Convert Bank Number to Address
461 PUSH ACC
462 MOV A,#HIGH ?BANK?SWITCH
463 PUSH ACC
464 PUSH DPL
465 PUSH DPH
466 LJMP ?B_SWITCH&N
467 ENDM
468
469
470 ?BANK?SELECT SEGMENT CODE
471
---- 472 RSEG ?BANK?SELECT
0000 473 CNT SET 0
474
475 REPT ?B_NBANKS
476 SELECT %CNT
477 CNT SET CNT+1
A51 MACRO ASSEMBLER L51_BANK 03/23/2009 13:06:23 PAGE 5
478
479 ENDM
480+1 SELECT %CNT
495+1 SELECT %CNT
510+1 SELECT %CNT
525+1 SELECT %CNT
540
541
542
543
544 ?BANK?SWITCH SEGMENT CODE PAGE
545
---- 546 RSEG ?BANK?SWITCH
0000 547 CNT SET 0
548
549 REPT ?B_NBANKS
550 SWITCH %CNT
551
552 CNT SET CNT+1
553 ENDM
554+1 SWITCH %CNT
576+1 SWITCH %CNT
598+1 SWITCH %CNT
620+1 SWITCH %CNT
642
643
ELSEIF ?B_RTX = 1
653
000E C8 654 SWITCHBNK: XCH A,R0
000F 10AF07 655 SWITCHBNK2: JBC EA,SWITCHBNK_EA1
0012 43900C 656 ORL ?B_CURRENTBANK, #?B_MASK
0015 5290 657 ANL ?B_CURRENTBANK, A
0017 E8 658 MOV A,R0
0018 22 659 RET
660
0019 661 SWITCHBNK_EA1: ; interrupts where enabled
0019 43900C 662 ORL ?B_CURRENTBANK, #?B_MASK
001C 5290 663 ANL ?B_CURRENTBANK, A
001E E8 664 MOV A,R0
001F D2AF 665 SETB EA ; enable interrupts again
0021 22 666 RET
667
0022 668 ?B_RESTORE_BANK: ; entry for RTX-51 bank restore
0022 44F3 669 ORL A,#NOT ?B_MASK
0024 80E9 670 SJMP SWITCHBNK2
671
672 ENDIF
673
674
675 ENDIF ; close block IF ?B_MODE = 0 *******************************************
676
677
ENDIF ; close block IF ?B_MODE = 1 *******************************************
919
920
ENDIF ; close block IF ?B_MODE = 4 *******************************************
993
---- 994 RSEG ?BANK?SELECT
995
996 ;************************ SWITCHBANK FUNCTION *******************************
997 ; *
998 ; SWITCHBANK allows use of bank-switching for C programs *
999 ; *
1000 ; prototype: extern switchbank (unsigned char bank_number); *
1001 ; *
1002 ;******************************************************************************
A51 MACRO ASSEMBLER L51_BANK 03/23/2009 13:06:23 PAGE 6
1003 PUBLIC _SWITCHBANK, ?B_SWITCHBANK_A
1004
0044 EF 1005 _SWITCHBANK: MOV A,R7
1006
1007 IF ?B_MODE = 0 ;**************************************************************
1008
0045 1009 ?B_SWITCHBANK_A:
1010 IF ?B_NBANKS > 32 OR ?B_RTX = 1
0045 23 1011 RL A
0046 23 1012 RL A
1013 ENDIF
1014
ENDIF
0047 900000 F 1019 MOV DPTR,#?BANK?SWITCH
004A 73 1020 JMP @A+DPTR
1021
1022 ENDIF ; close block IF ?B_MODE = 0 *******************************************
1023
ENDIF ; close block IF ?B_MODE = 1 *******************************************
1039
ENDIF ; close block IF ?B_MODE = 4 *******************************************
1069
1070
ENDIF ; close block IF ?B_VAR_BANKING ****************************************
1483
A51 MACRO ASSEMBLER L51_BANK 03/23/2009 13:06:23 PAGE 7
XREF SYMBOL TABLE LISTING
---- ------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES / REFERENCES
?BANK?SELECT . . . C SEG 004BH REL=UNIT 470# 472 994
?BANK?SWITCH . . . C SEG 0026H REL=PAGE 488 503 518 533 544# 546 1019
?BANK?SWITCHING. . N NUMB ----- 237
?B_BANK0 . . . . . C ADDR 0000H R SEG=?BANK?SELECT 482 483#
?B_BANK1 . . . . . C ADDR 0011H R SEG=?BANK?SELECT 497 498#
?B_BANK2 . . . . . C ADDR 0022H R SEG=?BANK?SELECT 512 513#
?B_BANK3 . . . . . C ADDR 0033H R SEG=?BANK?SELECT 527 528#
?B_CURRENTBANK . . D ADDR 0090H A 239 299# 484 499 514 529 656 657 662 663
?B_FACTOR. . . . . N NUMB 0004H A 240 271#
?B_FIRSTBIT. . . . N NUMB 0002H A 88# 271 273 286 289 292 295 304 311 317 322 328 335 342 348 384 391 398
404 409 415 422 429 715 722 728 733 739 746 753 759 792 798 805 812 818
823 829 836 1131 1137 1144 1152 1160 1167 1175 1183
?B_MASK. . . . . . N NUMB 000CH A 239 273# 485 500 515 530 558 580 602 624 656 662 669
?B_MODE. . . . . . N NUMB 0000H A 35# 75 93 109 239 269 678 921 1007 1024 1040 1125 1194 1263 1311
?B_NBANKS. . . . . N NUMB 0004H A 26# 239 255 257 259 261 263 281 301 381 444 475 549 559 565 569 581 587
591 603 609 613 625 631 635 644 712 772 778 782 790 901 1010 1015 1027
1032
?B_PORT. . . . . . D ADDR 0090H A 85# 299
?B_RESTORE_BANK. . C ADDR 0022H R SEG=?BANK?SWITCH 242 668#
?B_RST_BANK. . . . N NUMB 00FFH A 66# 240
?B_RTX . . . . . . N NUMB 0001H A 40# 241 301 381 644 652 910 1010 1015 1215 1226 1246 1254
?B_SWITCH0 . . . . C ADDR 0000H R SEG=?BANK?SWITCH 492 556 557#
?B_SWITCH1 . . . . C ADDR 0004H R SEG=?BANK?SWITCH 507 578 579#
?B_SWITCH2 . . . . C ADDR 0008H R SEG=?BANK?SWITCH 522 600 601#
?B_SWITCH3 . . . . C ADDR 000CH R SEG=?BANK?SWITCH 537 622 623#
?B_SWITCHBANK_A. . C ADDR 0045H R SEG=?BANK?SELECT 1003 1009#
?B_VAR_BANKING . . N NUMB 0000H A 50# 174 910 1042 1071
ACC. . . . . . . . D ADDR 00E0H A 246# 487 489 502 504 517 519 532 534
B. . . . . . . . . D ADDR 00F0H A 247#
BANK0. . . . . . . N NUMB 0000H A 286# 558
BANK1. . . . . . . N NUMB 0004H A 289# 580
BANK2. . . . . . . N NUMB 0008H A 292# 602
BANK3. . . . . . . N NUMB 000CH A 295# 624
B_SWITCH_SIZE. . . ---- ----- 988
CNT. . . . . . . . N NUMB 0004H A 279# 285 287# 287 288 290# 290 291 293# 293 294 296# 296 473# 480 493#
493 495 508# 508 510 523# 523 525 538# 538 547# 554 575# 575 576 597# 597
598 619# 619 620 641# 641
DPH. . . . . . . . D ADDR 0083H A 249# 491 506 521 536
DPL. . . . . . . . D ADDR 0082H A 248# 490 505 520 535
EA . . . . . . . . B ADDR 00A8H.7 A 251# 655 665
IE . . . . . . . . D ADDR 00A8H A 250# 251
LONG_MACRO . . . . ---- ----- 944 954 966 988
MASK . . . . . . . N NUMB 0003H A 258# 273
N. . . . . . . . . ---- ----- 441 444 773 775 778 782
P1 . . . . . . . . D ADDR 0090H A 83# 85
SWITCHBNK. . . . . C ADDR 000EH R SEG=?BANK?SWITCH 570 592 614 654#
SWITCHBNK2 . . . . C ADDR 000FH R SEG=?BANK?SWITCH 655# 670
SWITCHBNK_EA1. . . C ADDR 0019H R SEG=?BANK?SWITCH 655 661#
_SWITCHBANK. . . . C ADDR 0044H R SEG=?BANK?SELECT 1003 1005#
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -