
.Set_Draw_Bank
   LDR      R0,Draw_Bank
   LDR      R1,Num_Banks
   ADD      R0,R0,#1
   CMP      R0,R1
   MOVEQ    R0,#0
   LDR      R1,Display_Bank
   CMP      R0,R1
   MOVEQ    R15,R14
   STR      R0,Draw_Bank
   LDR      R1,Screen_Base
   LDR      R2,Screen_Size
   MLA      R3,R2,R0,R1
   STR      R3,Screen_Start
   ADD      R1,R0,#1
   MOV      R0,#112
   SWI      OS_Byte
   MOV      R15,R14

.Enable_Vsync_Event
   MOV      R0,#14
   MOV      R1,#4
   SWI      OS_Byte
   MOV      R0,#1
   STR      R0,Enable_Banking
   MOV      R15,R14

.Disable_Vsync_Event
   MOV      R0,#13
   MOV      R1,#4
   SWI      OS_Byte
   MOV      R0,#0
   STR      R0,Enable_Banking
   MOV      R15,R14

.Event_Handle
   CMP      R0,#6
   BNE      Not_Escape
   STMFD    R13!,{R0}
   MOV      R0,#1
   STR      R0,Escape_Flag
   LDMFD    R13!,{R0}
   MOV      R15,R14

.Not_Escape
   CMP      R0,#4
   MOVNE    R15,R14
   STMFD    R13!,{R0-R3,R14}
   LDR      R0,Num_Banks
   LDR      R1,Enable_Banking
   CMP      R0,#1
   CMPNE    R1,#0
   LDMEQFD  R13!,{R0-R3,R15}
   LDR      R1,Display_Bank
   LDR      R2,Draw_Bank
   ADD      R1,R1,#1
   CMP      R1,R0
   MOVEQ    R1,#0
   CMP      R1,R2
   LDMEQFD  R13!,{R0-R3,R15}
   STR      R1,Display_Bank
   MRS      R3,CPSR
   ORR      R0,R3,#1
   MSR      CPSR,R0
   MOV      R0,R0
   STMFD    R13!,{R14}
   MOV      R0,#113
   ADD      R1,R1,#1
   SWI      OS_Byte
   LDMFD    R13!,{R14}
   MSR      CPSR,R3
   MOV      R0,R0
   LDMFD    R13!,{R0-R3,R15}
