Difference between revisions of "Bdisp FrameAndColor"

From WikiPrizm
Jump to navigationJump to search
m (Added category.)
Line 5: Line 5:
 
| header = fxcg/display.h {{NoLibfxcg}}
 
| header = fxcg/display.h {{NoLibfxcg}}
 
| returns = The final value of it's internal flags.
 
| returns = The final value of it's internal flags.
| synopsis = What this function does depends on the value of action.
+
| synopsis = '''actions'''
 +
* If action == 0 clear the internal flags.
 +
* If action == 1 Take action based upon the internal flags and then clear the internal flags.
 +
* If action == 2 Set the internal flags to 0x8000.
 +
* If action == 3 Or the value of flags (the parameter not the internal variable) with 0x8000 and set the internal variable.
 +
* Other values of action just cause the function to return see [[#returns]].
  
If action == 0 clear the internal flags.
+
Possible flag values (this applies both to the parameter and the internal variable flags):
 
 
If action == 1 Take action based upon the internal flags and then clear the internal flags.
 
 
 
If action == 2 Set the internal flags to 0x8000.
 
 
 
If action == 3 Or the value of flags (the parameter not the internal variable) with 0x8000 and set the internal variable.
 
 
 
Other values of action just cause the function to return see [[#returns]].
 
 
 
Possible flag values:
 
 
* bit 15 If set allows the function to carry out other actions as determined by other flags when action == 1
 
* bit 15 If set allows the function to carry out other actions as determined by other flags when action == 1
 
* bit 4 If set enable 16-bit color mode, otherwise enable 8 color mode
 
* bit 4 If set enable 16-bit color mode, otherwise enable 8 color mode
* bit 0 If set draw a black frame, otherwise draw a black frame.
+
* bit 0 If set draw a white frame, otherwise draw a black frame.
  
 
| comments = Here is a disassembly of the function:
 
| comments = Here is a disassembly of the function:

Revision as of 17:46, 22 February 2015


Synopsis

Header: fxcg/display.h (Not yet in libfxcg)
Syscall index: 0x091E
Function signature: unsigned short Bdisp_FrameAndColor(int action,unsigned short flags);

actions

  • If action == 0 clear the internal flags.
  • If action == 1 Take action based upon the internal flags and then clear the internal flags.
  • If action == 2 Set the internal flags to 0x8000.
  • If action == 3 Or the value of flags (the parameter not the internal variable) with 0x8000 and set the internal variable.
  • Other values of action just cause the function to return see #returns.

Possible flag values (this applies both to the parameter and the internal variable flags):

  • bit 15 If set allows the function to carry out other actions as determined by other flags when action == 1
  • bit 4 If set enable 16-bit color mode, otherwise enable 8 color mode
  • bit 0 If set draw a white frame, otherwise draw a black frame.

Returns

The final value of it's internal flags.

Comments

Here is a disassembly of the function:

Bdisp_FrameAndColor:
		sts.l	pr, @-r15
		tst	r4, r4
		bt	clearFlags	! Branch if R4 is zero
		mov	r4, r0
		cmp/eq	#1, r0
		bt	R4One
		cmp/eq	#2, r0
		bt	R4Two
		cmp/eq	#3, r0
		bt	R4Three
		bra	exit
		nop
! ---------------------------------------------------------------------------

R4One:
		mov.l	#frameAndColorFlags, r1
		mov.w	#0xFFFF8000, r6
		extu.w	r6, r6		! r6 = 32768
		mov.w	@r1, r0
		tst	r6, r0		! Is bit 15 clear?
		bt	exit		! If so	branch without a delay
		tst	#16, r0
		mov.l	#Bdisp_SetDDRegisterB, r2
		bt/s	bit4Clear	! Branch if bit	4 is clear
		mov	#0, r4		! If bit 4 is clear set	r4 to 0
		mov	#1, r4		! Otherwise set	it to one

bit4Clear:
		jsr	@r2		! Bdisp_SetDDRegisterB
		nop
		mov.l	#frameAndColorFlags, r1
		mov.l	#DrawFrameC3, r2
		mov.w	@r1, r0
		tst	#1, r0
		bt	whiteFrame	! Branch if bit	0 is clear
		jsr	@r2 ! DrawFrameC3
		mov	#0, r4		! Black	frame
		bra	clearFlags
		nop
! ---------------------------------------------------------------------------

whiteFrame:
		jsr	@r2 ! DrawFrameC3
		mov	#7, r4

clearFlags:
		mov.l	#frameAndColorFlags, r1
		mov	#0, r2
		bra	exit
		mov.w	r2, @r1
! ---------------------------------------------------------------------------

R4Two:
		mov.l	#frameAndColorFlags, r1
		mov.w	#0xFFFF8000, r6
		bra	exit
		mov.w	r6, @r1
! ---------------------------------------------------------------------------

R4Three:
		mov.l	#frameAndColorFlags, r1
		mov.w	#0xFFFF8000, r6
		or	r6, r5
		mov.w	r5, @r1

exit:
		mov.l	#frameAndColorFlags, r1
		lds.l	@r15+, pr
		rts
		mov.w	@r1, r0
! End of function Bdisp_FrameAndColor