Synopsis #
Header: fxcg/display.h (Not yet in
libfxcg)
Syscall index: 0x091E
Function signature: unsigned short Bdisp_FrameAndColor(int
action,unsigned short flags);
Parameters #
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 black frame, otherwise draw a white 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