Difference between revisions of "Bdisp DDRegisterSelect"
From WikiPrizm
Jump to navigationJump to search (Created page with "{{syscall | name = Bdisp_DDRegisterSelect | index = 0x01A2 | signature = void Bdisp_DDRegisterSelect(int registerno) | header = fxcg/display.h | synopsis = Probably responsibl...") |
m (Replace P1 with registerno) |
||
(One intermediate revision by one other user not shown) | |||
Line 5: | Line 5: | ||
| header = fxcg/display.h | | header = fxcg/display.h | ||
| synopsis = Probably responsible for setting a register on the LCD controller (0xB4000000). | | synopsis = Probably responsible for setting a register on the LCD controller (0xB4000000). | ||
− | | comments = This syscall clears bit 4 of 0xA405013C.b, writes | + | | 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. | + | 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. |
+ | <nowiki>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 | ||
+ | </nowiki> | ||
}} | }} |
Latest revision as of 01:47, 27 March 2022
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