📄 startup400.lst
字号:
457
------ 458 rseg ?C_CPURESET?0
400000 8005 459 ?C_STARTUP: sjmp past_loader_tag
400002 54494E49 460 db 'TINI' ; Tag for TINI Environment 1.
02c
461 ; or later (ignored in 1.02b)
400006 40 462 db byte2(?C_STARTUP) ; Target bank
400007 463 past_loader_tag:
400007 C2AF 464 clr ea ; No interrupts, please
465
466 $if INTERNALSRAM = 1
;
; If DS80C410/DS80C411, optionally enable the internal 64KB SRAM on CE0
; and set it to merged code=data.
;
mov a, mcon1
anl a, #01111111b ; Clear IRAMD
orl a, #01000000b ; Set PRAME
mov ta, #0xAA ; Enable access to MCON1
mov ta, #0x55
mov mcon1, a
$endif
478
479 ;
480 ; Make sure we are in contiguous mode
481 ;
400009 75C7AA 482 mov ta, #0xAA ; Enable access to ACON
40000C 75C755 483 mov ta, #0x55
40000F 439D02 484 orl acon, #2 ; 24 bit mode
400012 02000000 F 485 ljmp far sanity_check ; Sanity check: Make sure 24
bit mode is on
400016 486 sanity_check:
400016 75C7AA 487 mov ta, #0xAA ; Enable access to MCON
400019 75C755 488 mov ta, #0x55
40001C 75C6AF 489 mov mcon, #0xAF ; Relocate RAM, data memory
40001F 75C7AA 490 mov ta, #0xAA ; Enable access to ACON
400022 75C755 491 mov ta, #0x55
400025 439D04 492 orl acon, #0x04 ; Extended stack
493
494 ;
495 ; Use the minimum number of stretch cycles on MOVX memory
496 ;
400028 538EF8 497 anl ckcon, #0f8h
498
499 ;
500 ; Make sure we are in a known state with respect to
501 ; our fancy data pointers and register banks
502 ;
40002B 758600 503 mov dps, #0
40002E 75D000 504 mov psw, #0
505
506 ;
507 ; Set stack to 0 (we lose one byte, but don't
508 ; have to know the size)
509 ;
400031 758100 510 mov sp,#0
400034 759B00 511 mov esp,#0
512
513 ;
514 ; Do the Crystal Multiplier
515 ;
516 $if XTALMULT = 2
startup_setxtal_mult_2:
AX51 MACRO ASSEMBLER STARTUP400 01/24/07 12:40:12 PAGE 9
;
; Multiply crystal frequency by 2
;
mov pmr, #10000010b ; Set for crystal * 2
mov pmr, #10010010b ; Enable multiplier
WaitCrystal:
mov a, exif ; Wait for multiplier to be r
eady
jnb acc.3, WaitCrystal ; Jump if CKRY is low
mov pmr, #00010010b ; Go to crystal * 2
$elseif XTALMULT = 4
startup_setxtal_mult_4:
;
; Multiply crystal frequency by 4
;
mov pmr, #10000010b ; Set to power up value
mov pmr, #10001010b ; Set for crystal * 4
mov pmr, #10011010b ; Enable multiplier
WaitCrystal4:
mov a, exif ; Wait for multiplier to be r
eady
jnb acc.3, WaitCrystal4 ; Jump if CKRY is low
mov pmr, #00011010b ; Go to crystal * 4
$endif
541
542 $if (INITIALIZE_SERIAL0 <> 0)
543 ; Enable the serial0, using timer 2 at 115200
544 ; Use this equation for the reloads:
545 ; reload H:L = 65536 - (oscillator / (32 * baud))
546 ; We now use User Configurable Equates for the serial
547 ; port settings. The default is for 115200, which
548 ; yeilds the following:
549 ; 65536 - (14745600 / (32 * 115200)) = 65536 - (14745600 / 3686400)
550 ; = 65536 - 4
551 ; = 65532
552 ; = 0xFFFC
400037 75985A 553 mov scon0, #5Ah ; 10 bit serial 0, use timer
baud rate, enable recieving
40003A 75CBFF 554 mov rcap2h, #High(TIMER_RELOAD) ; Set timer reload high byte
40003D 75CAFC 555 mov rcap2l, #Low(TIMER_RELOAD) ; Set timer reload low bye
400040 75C830 556 mov t2con, #30h ; Enable timer 2 for serial p
ort
400043 D2CA 557 setb tr2 ; Set timer 2 to run
558
559 ; Make sure that we can output to the serial port
400045 D299 560 setb ti
561 $else
clr tr2 ; Disable serial 0 output if
configured by ROM loader
$endif
564
565
566 if ERASE_IDATA <> 0
567 ; Save the boot state -- this direct will be saved and cleared by init_r
omexport
400047 C021 568 push BFLAGS
400049 78FF 569 mov r0, #ERASE_IDATA - 1
40004B E4 570 clr a
40004C 571 erase_idata_loop:
40004C F6 572 mov @r0, a
40004D D8FD 573 djnz r0, erase_idata_loop
40004F D021 574 pop BFLAGS
575 endif
576
577 $if (USE_REENTRANT_STACK <> 0)
AX51 MACRO ASSEMBLER STARTUP400 01/24/07 12:40:12 PAGE 10
mov xbp_loc, #?C_XBP
mov ?C_XBP,#HIGH XBPSTACKTOP
mov ?C_XBP+1,#LOW XBPSTACKTOP
else
400051 750000 F 582 mov xbp_loc, #0
583 $endif
584
585
586 $if SETMAC = 1
mov r0, #MAC_LSB
mov r1, #MAC_2
mov r2, #MAC_3
mov r3, #MAC_4
mov r4, #MAC_5
mov r5, #MAC_MSB
$endif
595
596 $if SETMAC = 2
;
; User MAC Code
;
; Insert code here that will get a MAC address in registers
; r5:r4:r3:r2:r1:r0, with r5 the MSB.
;
$endif
605
606 $if SETMAC > 0
; Push registers r0 to r5
push 0
push 1
push 2
push 3
push 4
push 5
mov a, #'C'
push acc
mov a, #'A'
push acc
mov a, #'M'
push acc
$endif
622
623
624
625
626 IF ERASE_XDATA_LEN <> 0
mov dptr, #ERASE_XDATA_ADDR
mov r7, #BYTE0 (ERASE_XDATA_LEN)
IF (BYTE0 (ERASE_XDATA_LEN)) <> 0
mov r6, #(BYTE1 ERASE_XDATA_LEN) +1
ELSE
mov r6, #BYTE1 (ERASE_XDATA_LEN)
ENDIF
IF (BYTE1 (ERASE_XDATA_LEN)) <> 0
mov r5, #(BYTE2 ERASE_XDATA_LEN) +1
ELSE
mov r5, #BYTE2 (ERASE_XDATA_LEN)
ENDIF
clr a
erase_xdata_loop:
movx @dptr, a
inc dptr
djnz r7, erase_xdata_loop
AX51 MACRO ASSEMBLER STARTUP400 01/24/07 12:40:12 PAGE 11
djnz r6, erase_xdata_loop
djnz r5, erase_xdata_loop
endif
647
400054 02000000 E 648 ljmp ?C_START
649 end
AX51 MACRO ASSEMBLER STARTUP400 01/24/07 12:40:12 PAGE 12
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?C_CPURESET?0 . . . . . . . . C SEG 400058H REL=ABS, ALN=BYTE
?C_START. . . . . . . . . . . C ADDR ------- EXT
?C_STARTUP. . . . . . . . . . C ADDR 00400000H R SEG=?C_CPURESET?0
AC. . . . . . . . . . . . . . B ADDR 00D0H.6 A
ACC . . . . . . . . . . . . . D ADDR 00E0H A
ACON. . . . . . . . . . . . . D ADDR 009DH A
AP. . . . . . . . . . . . . . D ADDR 009CH A
B . . . . . . . . . . . . . . D ADDR 00F0H A
BFLAGS. . . . . . . . . . . . N NUMB 0021H A
C0C . . . . . . . . . . . . . D ADDR 00A3H A
C0IE. . . . . . . . . . . . . B ADDR 00E8H.6 A
C0IP. . . . . . . . . . . . . B ADDR 00F8H.6 A
C0IR. . . . . . . . . . . . . D ADDR 00A5H A
C0M10C. . . . . . . . . . . . D ADDR 00B7H A
C0M11C. . . . . . . . . . . . D ADDR 00BBH A
C0M12C. . . . . . . . . . . . D ADDR 00BCH A
C0M13C. . . . . . . . . . . . D ADDR 00BDH A
C0M14C. . . . . . . . . . . . D ADDR 00BEH A
C0M15C. . . . . . . . . . . . D ADDR 00BFH A
C0M1C . . . . . . . . . . . . D ADDR 00ABH A
C0M2C . . . . . . . . . . . . D ADDR 00ACH A
C0M3C . . . . . . . . . . . . D ADDR 00ADH A
C0M4C . . . . . . . . . . . . D ADDR 00AEH A
C0M5C . . . . . . . . . . . . D ADDR 00AFH A
C0M6C . . . . . . . . . . . . D ADDR 00B3H A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -