Bdisp DDRegisterSelect

From WikiPrizm
Jump to navigationJump to search


Synopsis

Header: fxcg/display.h
Syscall index: 0x01A2
Function signature: void Bdisp_DDRegisterSelect(int registerno)

Probably responsible for setting a register on the LCD controller (0xB4000000).

Comments

This syscall clears bit 4 of 0xA405013C.b, writes registerno (r4) to 0xB4000000 and finally sets bit 4 of 0xA405013C.b again. It looks as if bit 4 controls the LCD-driver's RS-bit; refer to the R61509-manual for more information.

After every write to 0xA405013C or 0xB4000000, the SH-4A processor instruction SYNCO is performed. You can see this in action by reading the disassembly.

Bdisp_DDRegisterSelect:

var_2		= -2

		add	#-4, r15
		mov.l	#0xA405013C, r3
		mov	#~16, r5
		mov	r4, r0
		mov.w	r0, @(4+var_2,r15)
		mov.b	@r3, r1		! Read a byte from the address 0xA405013C and store that byte into R1
		and	r5, r1		! Clear	bit four of R1
		mov.b	r1, @r3
		synco
		mov	#0xFFFFFFB4, r6
		shll8	r6
		shll16	r6		! R6 = 0xB4000000
		mov.w	r4, @r6
		synco
		mov.b	@r3, r0
		or	#16, r0
		mov.b	r0, @r3
		synco
		rts
		add	#4, r15
! End of function Bdisp_DDRegisterSelect