52 lines
1.7 KiB
NASM
52 lines
1.7 KiB
NASM
;================================================================================
|
|
; D-Pad Invert
|
|
; runs in NMI, must use minimum possible # of cycles
|
|
;--------------------------------------------------------------------------------
|
|
; Filtered Joypad 1 Register: [AXLR | ????]
|
|
; Filtered Joypad 1 Register: [BYST | udlr] [AXLR | ????]
|
|
!INVERT_DPAD = "$7F50CB"
|
|
InvertDPad:
|
|
LDA !INVERT_DPAD : BNE + : JMP .normal : +
|
|
DEC : BEQ .dpadOnly
|
|
DEC : BEQ .buttonsOnly
|
|
DEC : BEQ .invertBoth
|
|
.swapSides
|
|
REP #$20 ; set 16-bit accumulator
|
|
LDA $4218
|
|
BIT.w #$0840 : BEQ + : EOR.w #$0840 : + ; swap X/up
|
|
BIT.w #$0180 : BEQ + : EOR.w #$0180 : + ; swap A/right
|
|
BIT.w #$4200 : BEQ + : EOR.w #$4200 : + ; swap Y/left
|
|
BIT.w #$8400 : BEQ + : EOR.w #$8400 : + ; swap B/down
|
|
STA $00
|
|
SEP #$20 ; set 8-bit accumulator
|
|
JML.l InvertDPadReturn
|
|
.invertBoth
|
|
REP #$20 ; set 16-bit accumulator
|
|
LDA $4218
|
|
BIT.w #$8040 : BEQ + : EOR.w #$8040 : + ; swap X/B
|
|
BIT.w #$4080 : BEQ + : EOR.w #$4080 : + ; swap Y/A
|
|
BIT.w #$0C00 : BEQ + : EOR.w #$0C00 : + ; swap up/down
|
|
BIT.w #$0300 : BEQ + : EOR.w #$0300 : + ; swap left/right
|
|
STA $00
|
|
SEP #$20 ; set 8-bit accumulator
|
|
JML.l InvertDPadReturn
|
|
.buttonsOnly
|
|
REP #$20 ; set 16-bit accumulator
|
|
LDA $4218
|
|
BIT.w #$8040 : BEQ + : EOR.w #$8040 : + ; swap X/B
|
|
BIT.w #$4080 : BEQ + : EOR.w #$4080 : + ; swap Y/A
|
|
STA $00
|
|
SEP #$20 ; set 8-bit accumulator
|
|
JML.l InvertDPadReturn
|
|
.dpadOnly
|
|
LDA $4218 : STA $00
|
|
LDA $4219
|
|
BIT.b #$0C : BEQ + : EOR.b #$0C : + ; swap up/down
|
|
BIT.b #$03 : BEQ + : EOR.b #$03 : + ; swap left/right
|
|
STA $01
|
|
JML.l InvertDPadReturn
|
|
.normal
|
|
LDA $4218 : STA $00
|
|
LDA $4219 : STA $01
|
|
JML.l InvertDPadReturn
|
|
;-------------------------------------------------------------------------------- |