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