;Generates a 50Hz VSync below RO5 if No_Frame_Pacing == 0

;os_byte_13_or_14
;----------------
;PRM1-147 - Enable / Disable event
;
;Entry:
; R11 - pointer to VARS
;Exit:
; R2 corrupted

.os_byte_13_or_14
 TEQ     R0, #13			;disable?
 BNE     _P1				;NO

 STMFD   R13!, {R3, R4, R5}
 MOV     R3, #1				;1 if initially disabled
 #if No_Frame_Pacing == 0 AND compile_RO == 450
   TEQ     R1, #4
   MOVEQ   R3, #2			;+1 for VSync, as we need it
 #endif
 MOV     R4, R1				;preserve event ID
 MOV     R0, #14			;enable first, to get status
 BL      pre_SWI_veneer			;call SWI that follows
 SWI     XOS_Byte
 MOV     R5, R1				;preserve previous state

 MOV     R0, #13			;reset back
 MOV     R1, R4				;preserve event ID
 BL      pass_SWI_on			;bypass us to prevent re-entry
 SWI     XOS_Byte
 BL      dontexit_SWI_veneer

 TEQ     R1, R3				;1 if initially disabled
 MOVNE   R1, R4				;preserve event ID
 LDMFD   R13!, {R3, R4}			;pull R3, R4
 MOVEQ   R1, R5				;preserve previous state
 LDREQ   R5, [R13], #4			;preserve R5
 BEQ     exit_SWI_veneer		; |+  exit as already disabled
 #if No_Frame_Pacing == 0 AND compile_RO == 450
   TEQ     R1, #4			;Event 4?
   LDREQ   R5, [R13], #4		;preserve R5
   BEQ     _P1				;YES
 #endif
 BL      pre_SWI_veneer			;call SWI that follows
 SWI     XOS_Byte

 MOV     R1, R5				;preserve previous state
 LDR     R5, [R13], #4
 B       exit_SWI_veneer

 ._P1
 #if No_Frame_Pacing == 0 AND compile_GPU == 1
   B       vector_handler_forward	;forward to OS
 #endif

#if No_Frame_Pacing == 0 AND compile_RO < 500
 TEQ     R1, #4				;event 4 - PRM1-147
 BNE     vector_handler_forward		;NO, forward to OS

 BL      pre_SWI_veneer			;call SWI that follows
 SWI     XADFFS_DoNothing

 TEQ     R0, #13			;disable event?
 BEQ     _disable

 LDRB    R14, [R11, #event_4_enabled - VARS]
 TEQ     R14, #0
 BNE     vector_handler_trap		;already generating event 4

 MOV     R0, #1				;50Hz
 ADR     R1, _trigger_event_4
 STRB    R1, [R11, #event_4_enabled - VARS]
 MOV     R2, #0
 SWI     XOS_CallEvery			;PRM1-443
B       exit_SWI_veneer

 ._disable
 BL      release_event_4
B       exit_SWI_veneer


 ._trigger_event_4
 STMFD   R13!, {R0-R9, R14}
 MOV     R0, #4				;generate a VSync event
 MOV     R9, #Vector_EventV
 SWI     XOS_CallAVector		;PRM1-70
LDMFD   R13!, {R0-R9, PC}

 


;release_event_4
;---------------
;Stops generating VSync events

.release_event_4
 STMFD   R13!, {R0-R2, R12, R14}
 ADR     R12, VARS

 LDRB    R0, [R12, #event_4_enabled - VARS]
 TEQ     R0, #0
 MOVNE   R1, #0
 STRNEB  R1, [R12, #event_4_enabled - VARS]
 SWINE   XOS_RemoveTickerEvent		;PRM1-445
LDMFD   R13!, {R0-R2, R12, PC}
#endif