【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 @ 子程序返回