【BA4988】_restore_bank_number函数


反汇编:

_restore_bank_number(bankNumber)
{
    BankSwitchTemp = bankNumber
    if (BankSwitchTemp < 0xE0)
    {
        _03E5 = 0x80
        _03E4 = 0x0E
        BankSwitchTemp1 = 0x0E80
    }
    else
    {
        BankSwitchTemp -= 0xE0
        BankSwitchTemp1 = _2029 // 两字节变量
    }
    _BK_SEL = 0x05
    page0_start = BankSwitchTemp1 + (BankSwitchTemp << 2)
    BankSwitchTemp = page0_start >> 8

    _BK_SEL+=1
    *((U16 *)&_BK_ADRL)+=1
    BankSwitchTemp = _BK_ADRH

    _BK_SEL+=1
    *((U16 *)&_BK_ADRL)+=1
    BankSwitchTemp = _BK_ADRH

    _BK_SEL+=1
    *((U16 *)&_BK_ADRL)+=1
    BankSwitchTemp = _BK_ADRH
}

汇编:

E8FE [4C 2A F5]: JMP $F52A @ 转移
F52A [08 78 8D]: PHP @ 处理器状态压入堆栈
F52B [78 8D 00]: SEI @ 置中断禁止位
F52C [8D 00 20]: STA $2000 = #$00 @ 存累加器
F52F [8A 48 98]: TXA @ 变址寄存器X送累加器
F530 [48 98 48]: PHA @ 累加器压入堆栈
F531 [98 48 AD]: TYA @ 变址寄存器Y送累加器
F532 [48 AD 00]: PHA @ 累加器压入堆栈
F533 [AD 00 20]: LDA $2000 = #$00 @ 送累加器
F536 [C9 E0 B0]: CMP #$E0 @ 累加器与存储器比较
F538 [B0 0F AD]: BCS $F549 @ 进位为“1”分支
F53A [AD E5 03]: LDA $03E5 = #$80 @ 送累加器
F53D [8D 01 20]: STA $2001 = #$80 @ 存累加器
F540 [AD E4 03]: LDA $03E4 = #$0E @ 送累加器
F543 [8D 02 20]: STA $2002 = #$0E @ 存累加器
F546 [4C 5B F5]: JMP $F55B @ 转移
F549 [38 E9 E0]: SEC @ 置进位标志
F54A [E9 E0 8D]: SBC #$E0 @ 带借位的减法
F54C [8D 00 20]: STA $2000 = #$20 @ 存累加器
F54F [AD 29 20]: LDA $2029 = #$2F @ 送累加器
F552 [8D 01 20]: STA $2001 = #$2F @ 存累加器
F555 [AD 2A 20]: LDA $202A = #$02 @ 送累加器
F558 [8D 02 20]: STA $2002 = #$02 @ 存累加器
F55B [A9 05 85]: LDA #$05 @ 送累加器
F55D [85 0C AD]: STA $0C = #$05 @ 存累加器
F55F [AD 00 20]: LDA $2000 = #$00 @ 送累加器
F562 [0A AA A9]: ASL @ 左移
F563 [AA A9 00]: TAX @ 累加器送变址寄存器X
F564 [A9 00 2A]: LDA #$00 @ 送累加器
F566 [2A A8 8A]: ROL @ 循环左移
F567 [A8 8A 0A]: TAY @ 累加器送变址寄存器Y
F568 [8A 0A AA]: TXA @ 变址寄存器X送累加器
F569 [0A AA 98]: ASL @ 左移
F56A [AA 98 2A]: TAX @ 累加器送变址寄存器X
F56B [98 2A A8]: TYA @ 变址寄存器Y送累加器
F56C [2A A8 8A]: ROL @ 循环左移
F56D [A8 8A 18]: TAY @ 累加器送变址寄存器Y
F56E [8A 18 6D]: TXA @ 变址寄存器X送累加器
F56F [18 6D 01]: CLC @ 清进位标志
F570 [6D 01 20]: ADC $2001 = #$80 @ 带进位加
F573 [85 0D 98]: STA $0D = #$80 @ 存累加器
F575 [98 6D 02]: TYA @ 变址寄存器Y送累加器
F576 [6D 02 20]: ADC $2002 = #$0E @ 带进位加
F579 [85 0E 8D]: STA $0E = #$0E @ 存累加器
F57B [8D 00 20]: STA $2000 = #$0E @ 存累加器
F57E [A5 0D E6]: LDA $0D = #$80 @ 送累加器
F580 [E6 0C 18]: INC $0C = #$06 @ 存储器加1
F582 [18 69 01]: CLC @ 清进位标志
F583 [69 01 85]: ADC #$01 @ 带进位加
F585 [85 0D A9]: STA $0D = #$81 @ 存累加器
F587 [A9 00 6D]: LDA #$00 @ 送累加器
F589 [6D 00 20]: ADC $2000 = #$0E @ 带进位加
F58C [85 0E 8D]: STA $0E = #$0E @ 存累加器
F58E [8D 00 20]: STA $2000 = #$0E @ 存累加器
F591 [A5 0D E6]: LDA $0D = #$81 @ 送累加器
F593 [E6 0C 18]: INC $0C = #$07 @ 存储器加1
F595 [18 69 01]: CLC @ 清进位标志
F596 [69 01 85]: ADC #$01 @ 带进位加
F598 [85 0D A9]: STA $0D = #$82 @ 存累加器
F59A [A9 00 6D]: LDA #$00 @ 送累加器
F59C [6D 00 20]: ADC $2000 = #$0E @ 带进位加
F59F [85 0E 8D]: STA $0E = #$0E @ 存累加器
F5A1 [8D 00 20]: STA $2000 = #$0E @ 存累加器
F5A4 [A5 0D E6]: LDA $0D = #$82 @ 送累加器
F5A6 [E6 0C 18]: INC $0C = #$08 @ 存储器加1
F5A8 [18 69 01]: CLC @ 清进位标志
F5A9 [69 01 85]: ADC #$01 @ 带进位加
F5AB [85 0D A9]: STA $0D = #$83 @ 存累加器
F5AD [A9 00 6D]: LDA #$00 @ 送累加器
F5AF [6D 00 20]: ADC $2000 = #$0E @ 带进位加
F5B2 [85 0E 8D]: STA $0E = #$0E @ 存累加器
F5B4 [8D 00 20]: STA $2000 = #$0E @ 存累加器
F5B7 [68 A8 68]: PLA @ 堆栈弹回累加器
F5B8 [A8 68 AA]: TAY @ 累加器送变址寄存器Y
F5B9 [68 AA 28]: PLA @ 堆栈弹回累加器
F5BA [AA 28 60]: TAX @ 累加器送变址寄存器X
F5BB [28 60 A0]: PLP @ 堆栈弹回处理器状态
F5BC [60 A0 00]: RTS @ 子程序返回