1. 程式人生 > 其它 >【BA4988】DataBankSwitch函式

【BA4988】DataBankSwitch函式

反彙編:

void DataBankSwitch(U8 logicStartBank,U8 bankNumber,U16 physicalStartBank)
{
    _BK_SEL = logicStartBank
    _BK_ADRL = physicalStartBank & 0xFF
    _BK_ADRH = physicalStartBank >> 8
    while (U8 i=bankNumber-1; i != 0; i--)
    {
        _BK_SEL += 1
        _BK_ADRL = (_BK_ADRL + 1) & 0xFF
        _BK_ADRH += (_BK_ADRL + 1)>>8
    }
}

彙編:

E907 [4C 75 F4]: JMP $F475 @ 轉移
F475 [08 78 85]: PHP @ 處理器狀態壓入堆疊
F476 [78 85 0C]: SEI @ 置中斷禁止位
F477 [85 0C A0]: STA $0C = #$09 @ 存累加器
F479 [A0 01 B1]: LDY #$01 @ 送變址暫存器Y
F47B [B1 28 85]: LDA ($28),Y @ $17AD = #$B0 @ 送累加器
F47D [85 0D C8]: STA $0D = #$B0 @ 存累加器
F47F [C8 B1 28]: INY @ 變址暫存器Y加1
F480 [B1 28 85]: LDA ($28),Y @ $17AE = #$17 @ 送累加器
F482 [85 0E 48]: STA $0E = #$17 @ 存累加器
F484 [48 A0 00]: PHA @ 累加器壓入堆疊
F485 [A0 00 B1]: LDY #$00 @ 送變址暫存器Y
F487 [B1 28 AA]: LDA ($28),Y @ $17AC = #$04 @ 送累加器
F489 [AA CA E0]: TAX @ 累加器送變址暫存器X
F48A [CA E0 00]: DEX @ 變址暫存器X減1
F48B [E0 00 F0]: CPX #$00 @ 變址暫存器X與儲存暫存器比較
F48D [F0 13 A5]: BEQ $F4A0 @ 結果為0分支
F48F [A5 0D E6]: LDA $0D = #$B0 @ 送累加器
F491 [E6 0C 18]: INC $0C = #$0A @ 儲存器加1
F493 [18 69 01]: CLC @ 清進位標誌
F494 [69 01 85]: ADC #$01 @ 帶進位加
F496 [85 0D 68]: STA $0D = #$B1 @ 存累加器
F498 [68 69 00]: PLA @ 堆疊彈回累加器
F499 [69 00 85]: ADC #$00 @ 帶進位加
F49B [85 0E 48]: STA $0E = #$17 @ 存累加器
F49D [48 CA 4C]: PHA @ 累加器壓入堆疊
F49E [CA 4C 8B]: DEX @ 變址暫存器X減1
F49F [4C 8B F4]: JMP $F48B @ 轉移
F4A2 [68 28 60]: PLA @ 堆疊彈回累加器
F4A3 [28 60 08]: PLP @ 堆疊彈回處理器狀態
F4A4 [60 08 78]: RTS @ 子程式返回