diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/classic_controller.S | 62 | 
1 files changed, 46 insertions, 16 deletions
diff --git a/src/classic_controller.S b/src/classic_controller.S index 86be34f..2ba7a9e 100644 --- a/src/classic_controller.S +++ b/src/classic_controller.S @@ -10,6 +10,16 @@  .set f30,30; .set f31,31  #endif +.set stackSize,0x30; +.set r4Place,0x10; +.set r5Place,0x14; +.set r6Place,0x18; +.set r26Place,0x1c; +.set f8Place,0x20; +.set f9Place,0x24; +.set f10Place,0x28; +.set f11Place,0x2c; +  .text  .align 4 @@ -17,7 +27,17 @@  _switch_buttons:  	addi    r1,r1,0x50			# replaced instruction +	stwu	r1,-stackSize(r1)		# provide new stack for saving regs  	mflr    r0 +	stw		r4,r4Place(r1) +	stw		r5,r5Place(r1) +	stw		r6,r6Place(r1) +	stw		r26,r26Place(r1) +	stfs	f8,f8Place(r1) +	stfs	f9,f9Place(r1) +	stfs	f10,f10Place(r1) +	stfs	f11,f11Place(r1) +  	lwz     r5,0x60(r26)		# wiimote cc data  	bl      map_buttons  	lwz     r4,0(r26) @@ -33,7 +53,17 @@ _switch_buttons:  	lwz     r4,8(r26)  	or      r5,r5,r4  	stw     r5,8(r26) + +	lwz		r4,r4Place(r1) +	lwz		r5,r5Place(r1) +	lwz		r6,r6Place(r1) +	lwz		r26,r26Place(r1) +	lfs		f8,f8Place(r1) +	lfs		f9,f9Place(r1) +	lfs		f10,f10Place(r1) +	lfs		f11,f11Place(r1)  	mtlr    r0 +	addi	r1,r1,stackSize  	blr  map_buttons: @@ -88,22 +118,22 @@ skip_minus:  	lis		r5,float_one@h  	lfs		f10,float_one@l(r5)  	lfs		f11,float_neg_one@l(r5) -	fcmpu	cr1,f8,f10 -	bne		cr1,skip_right_analog -	ori     r6,r6,4			// WPAD_BUTTON_DOWN -skip_right_analog: -	fcmpu	cr1,f9,f10 -	bne		cr1,skip_right_analog -	ori     r6,r6,2			// WPAD_BUTTON_RIGHT -skip_up_analog: -	fcmpu	cr1,f9,f11 -	bne		cr1,skip_right_analog -	ori     r6,r6,1			// WPAD_BUTTON_LEFT -skip_down_analog: -	fcmpu	cr1,f8,f11 -	bne		cr1,skip_right_analog -	ori     r6,r6,8			// WPAD_BUTTON_UP -skip_left_analog: +#	fcmpu	cr0,f8,f10 +#	bne		skip_right_analog +#	ori     r6,r6,4			// WPAD_BUTTON_DOWN +#skip_right_analog: +#	fcmpu	cr0,f9,f10 +#	bne		skip_right_analog +#	ori     r6,r6,2			// WPAD_BUTTON_RIGHT +#skip_up_analog: +#	fcmpu	cr0,f9,f11 +#	bne		skip_right_analog +#	ori     r6,r6,1			// WPAD_BUTTON_LEFT +#skip_down_analog: +#	fcmpu	cr0,f8,f11 +#	bne		skip_right_analog +#	ori     r6,r6,8			// WPAD_BUTTON_UP +#skip_left_analog:  	mr      r5,r6  	blr  | 
