MVN test.
Code
header lorom !ofs = $8FF000 macro ReadByte() STX $8A LDA [$8A] INX BNE $03 JSR BANK_INC endmacro org $80B8E3 JSL !ofs RTS org !ofs PHB PEI ($03) PEI ($05) PEI ($07) PEI ($09) PEI ($0B) PEI ($8A) SEP #$20 REP #$10 LDA $02 PHA PLB STA $05 ; dest_bank INC STA $03 ; dest_bank [plus or minus] LDA #$54 STA $04 ; mvn LDA #$4C STA $07 ; jump LDA $8C STA $06 ; src_bank LDX.w #.back STX $08 LDY $00 ; dest_low LDX $8A ; src_low STZ $8A STZ $8B BRA .main .case_80_or_e0 BPL .lz LDA $8D CMP #$1F BNE .case_e0 PLX : STX $8A PLX : STX $0B PLX : STX $09 PLX : STX $07 PLX : STX $05 PLX : STX $03 SEP #$10 PLB RTL .case_e0 AND #$03 STA $8E EOR $8D ASL ASL ASL XBA %ReadByte() STA $8D XBA BRA .type .lz %ReadByte() XBA %ReadByte() STX $0B REP #$21 ADC $00 TAX LDA $8D SEP #$20 BIT $03 BPL + MVN $7F7F BRA ++ + MVN $7E7E ++ LDX $0B .main %ReadByte() STA $8D STZ $8E AND #$E0 TRB $8D .type ASL BCS .case_80_or_e0 BMI .case_40_or_60 ASL BMI .case_20 .case_00 REP #$20 LDA $8D STX $8D - SEP #$20 JMP $0004 .back CPX $8D BCS .main JSR BANK_INC_2 CPX #$0000 BEQ ++ DEX STX $0B REP #$21 LDX #$8000 STX $8D TYA SBC $0B TAY LDA $0B BRA - ++ LDX #$8000 BRA .main .case_20 %ReadByte() STX $0B PHA PHA REP #$20 .case_20_main LDA $8D INC LSR TAX PLA - STA $0000,Y INY INY DEX BNE - SEP #$20 BCC + STA $0000,Y INY + LDX $0B BRA .main .case_40_or_60 ASL BMI .case_60 %ReadByte() XBA %ReadByte() XBA STX $0B REP #$20 PHA BRA .case_20_main .case_60 %ReadByte() STX $0B LDX $8D - STA $0000,Y INC INY DEX BPL - LDX $0B JMP .main BANK_INC: LDX #$8000 BANK_INC_2: INC $06 INC $8C RTS