Bdisp EnableColor

From WikiPrizm
Revision as of 19:10, 22 February 2015 by ProgrammerNerd (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search


Header: fxcg/display.h
Syscall index: 0x0921
Function signature: int Bdisp_EnableColor(int n);

Switches the screen between full color mode (16 bits per pixel, RGB565) and indexed color mode (3 bits per pixel, 8 colors - the same that can be used with PrintXY).


  • n: 0 to disable full color, 1 to enable full color.


The result of Bdisp_IsZeroDDRegisterB (see disassembly for details).


One can switch between the two color modes as needed, not just when an add-in starts.

This function does not yield immediate results. If you want that use Bdisp SetDDRegisterB. You can call Bdisp_FrameAndColor or a function that uses Bdisp_FrameAndColor such as GetKey.

Most of the time, the OS works with the indexed color mode to reduce memory requirements and increase speed. Exceptions include the main menu, whenever a g3p picture is displayed, and screens with a theme-related background like the eActivity file browser. Most custom add-ins work always in full color mode regardless of needing any color other than the eight indexed ones - this is a often forgotten optimization tip.

To get a better understanding of what really happens see the disassembly.


colorType	= -0xC

		mov.l	r14, @-r15
		sts.l	pr, @-r15
		add	#-4, r15
		mov.l	#Bdisp_IsZeroDDRegisterB, r2
		jsr	@r2 ! Bdisp_IsZeroDDRegisterB
		mov.l	r4, @(0xC+colorType,r15)
		mov.l	@(0xC+colorType,r15), r4
		extu.b	r0, r14
		bsr	Bdisp_ColorAndFrameSetFlags
		mov	#7, r5
		mov	r14, r0
		add	#4, r15
		lds.l	@r15+, pr
		mov.l	@r15+, r14
! End of function Bdisp_EnableColor