【BA4988】系统启动入口


反汇编:

__init__()
{
    __lib_temp_ptr = 0x17D7
    __stack_ptr = 0x17D7
    self.S = 0xFF // 修改栈指针
    _SYSCON = 0x02
    _CPUCLK = 0x03
    _SYSCON = 0x44
    _OSCK = 0xF3
    _SYSCON = 0x05

    X=0xFF
    do
    {
        for (i=0; i<10; i++)
        {
            void // nop
        }
        X -= 1
    }
    while (X>=0x01)
    _CPUCLK=X
    A=0
    X=1
    Y=1
    do
    {
        _BK_SEL = X
        _BK_ADRL=Y
        _BK_ADRH=A
        Y+=1
        X+=1
    }
    while (X<0x05)
    Y=*(U8*)0x03E5
    X=9
    A=*(U8*)0x03E4
    do
    {
        _BK_SEL = X
        _BK_ADRL=Y
        _BK_ADRH=A
        Y+=1
        X+=1
    }
    while (X<0x0D)
    A = *(U8*)0x03E5
    A += 0x08
    Y=A
    X=0x0D
    A = *(U8*)0x03E4
    do
    {
        _BK_SEL=X
        _BK_ADRL=Y
        _BK_ADRH=A
        Y+=1
        X+=1
    }
    while (X<0x10)
    *(u16*)&__addr_reg=0xE746
    __banked_function_call()
}

汇编:

0354 [EA 78 D8]: NOP @ 空操作
0355 [78 D8 38]: SEI @ 置中断禁止位
0356 [D8 38 A9]: CLD @ 清十进制方式
0357 [38 A9 FF]: SEC @ 置进位标志
0358 [A9 FF E9]: LDA #$FF @ 送累加器
035A [E9 28 85]: SBC #$28 @ 带借位的减法
035C [85 2A 85]: STA $2A = #$D7 @ 存累加器
035E [85 28 A9]: STA $28 = #$D7 @ 存累加器
0360 [A9 17 E9]: LDA #$17 @ 送累加器
0362 [E9 00 85]: SBC #$00 @ 带借位的减法
0364 [85 2B 85]: STA $2B = #$17 @ 存累加器
0366 [85 29 A2]: STA $29 = #$17 @ 存累加器
0368 [A2 FF 9A]: LDX #$FF @ 送变址寄存器X
036A [9A A9 02]: TXS @ 变址寄存器X送栈指针
036B [A9 02 8D]: LDA #$02 @ 送累加器
036D [8D 00 02]: STA $0200 = #$02 @ 存累加器
0370 [A9 03 8D]: LDA #$03 @ 送累加器
0372 [8D 01 02]: STA $0201 = #$03 @ 存累加器
0375 [A9 44 8D]: LDA #$44 @ 送累加器
0377 [8D 00 02]: STA $0200 = #$44 @ 存累加器
037A [A9 F3 8D]: LDA #$F3 @ 送累加器
037C [8D 02 02]: STA $0202 = #$F3 @ 存累加器
037F [A9 05 8D]: LDA #$05 @ 送累加器
0381 [8D 00 02]: STA $0200 = #$05 @ 存累加器
0384 [A2 FF EA]: LDX #$FF @ 送变址寄存器X
0386 [EA EA EA]: NOP @ 空操作
0387 [EA EA EA]: NOP @ 空操作
0388 [EA EA EA]: NOP @ 空操作
0389 [EA EA EA]: NOP @ 空操作
038A [EA EA EA]: NOP @ 空操作
038B [EA EA EA]: NOP @ 空操作
038C [EA EA EA]: NOP @ 空操作
038D [EA EA EA]: NOP @ 空操作
038E [EA EA CA]: NOP @ 空操作
038F [EA CA E0]: NOP @ 空操作
0390 [CA E0 01]: DEX @ 变址寄存器X减1
0391 [E0 01 B0]: CPX #$01 @ 变址寄存器X与存储寄存器比较
0393 [B0 F1 8E]: BCS $0386 @ 进位为“1”分支
0395 [8E 01 02]: STX $0201 = #$00 @ 存变址寄存器X
0398 [A9 00 A2]: LDA #$00 @ 送累加器
039A [A2 01 A0]: LDX #$01 @ 送变址寄存器X
039C [A0 01 86]: LDY #$01 @ 送变址寄存器Y
039E [86 0C 84]: STX $0C = #$01 @ 存变址寄存器X
03A0 [84 0D 85]: STY $0D = #$01 @ 存变址寄存器Y
03A2 [85 0E C8]: STA $0E = #$00 @ 存累加器
03A4 [C8 E8 E0]: INY @ 变址寄存器Y加1
03A5 [E8 E0 05]: INX @ 变址寄存器X加1
03A6 [E0 05 90]: CPX #$05 @ 变址寄存器X与存储寄存器比较
03A8 [90 F4 AC]: BCC $039E @ 进位为0分支
03AA [AC E5 03]: LDY $03E5 = #$80 @ 送变址寄存器Y
03AD [A2 09 AD]: LDX #$09 @ 送变址寄存器X
03AF [AD E4 03]: LDA $03E4 = #$0E @ 送累加器
03B2 [86 0C 84]: STX $0C = #$09 @ 存变址寄存器X
03B4 [84 0D 85]: STY $0D = #$80 @ 存变址寄存器Y
03B6 [85 0E C8]: STA $0E = #$0E @ 存累加器
03B8 [C8 E8 E0]: INY @ 变址寄存器Y加1
03B9 [E8 E0 0D]: INX @ 变址寄存器X加1
03BA [E0 0D 90]: CPX #$0D @ 变址寄存器X与存储寄存器比较
03BC [90 F4 AD]: BCC $03B2 @ 进位为0分支
03BE [AD E5 03]: LDA $03E5 = #$80 @ 送累加器
03C1 [18 69 08]: CLC @ 清进位标志
03C2 [69 08 A8]: ADC #$08 @ 带进位加
03C4 [A8 A2 0D]: TAY @ 累加器送变址寄存器Y
03C5 [A2 0D AD]: LDX #$0D @ 送变址寄存器X
03C7 [AD E4 03]: LDA $03E4 = #$0E @ 送累加器
03CA [86 0C 84]: STX $0C = #$0D @ 存变址寄存器X
03CC [84 0D 85]: STY $0D = #$88 @ 存变址寄存器Y
03CE [85 0E C8]: STA $0E = #$0E @ 存累加器
03D0 [C8 E8 E0]: INY @ 变址寄存器Y加1
03D1 [E8 E0 10]: INX @ 变址寄存器X加1
03D2 [E0 10 90]: CPX #$10 @ 变址寄存器X与存储寄存器比较
03D4 [90 F4 58]: BCC $03CA @ 进位为0分支
03D6 [58 A2 46]: CLI @ 清中断禁止位
03D7 [A2 46 86]: LDX #$46 @ 送变址寄存器X
03D9 [86 26 A2]: STX $26 = #$46 @ 存变址寄存器X
03DB [A2 E7 86]: LDX #$E7 @ 送变址寄存器X
03DD [86 27 20]: STX $27 = #$E7 @ 存变址寄存器X
03DF [20 F6 D2]: JSR $D2F6 @ 转子