;resetVectors
;------------
;Resets key vectors during image loading

.resetVectors
 STMFD   R13!, {R0-R7, R12, R14}

 ADR     R12, VARS
 ADD     R6, R12, #softwareVectorBitmap - VARS
 ADD     R4, R12, #softwareVectors - VARS - (8 * FirstVectorToTrack)

 MOV     R0, #Vector_CLIV
 BL      checkVector
 MOV     R0, #Vector_ByteV
 BL      checkVector
 MOV     R0, #Vector_WordV
 BL      checkVector
 MOV     R0, #Vector_FileV
 BL      checkVector
 MOV     R0, #Vector_ArgsV
 BL      checkVector
 MOV     R0, #Vector_BGetV
 BL      checkVector
 MOV     R0, #Vector_BPutV
 BL      checkVector
 MOV     R0, #Vector_GBPBV
 BL      checkVector
 MOV     R0, #Vector_FindV
 BL      checkVector
LDMFD   R13!, {R0-R7, R12, PC}



;checkVector
;-----------
;checks if a vector has change and points it back to ths OS if it has
;
;Entry:
; R0 = vector
; R4 = pointer to our vector table copy
; R6 = pointer to softwareVectorBitmap
;
;Exit:
; R1-R3   - corrupt
; R7      - corrupt

.checkVector
 ADD     R7, R4, R0, LSL #3		;R7 = our copy of the vector in question

 LDR     R1, [R6, R0, LSR #5]		;load relevant word from bitmap table
 MOV     R3, #1
 TST     R1, R3, LSL R0			;have we already released the vector
 LDMIA   R7, {R1, R2}			;load R12, PC values into registers
 BNE     _reclaim			;YES, reclaim it

 TEQ     R1, #0				;do we have values?
 MOVEQ   PC, R14			;NO, exit

 STMFD   R13!, {R0, R14}
 BL      pass_SWI_on
 SWI     XOS_Release			;temporarily release the vector
 LDMVSFD R13!, {R0, PC}			;failed..hmm..hope for the best
 LDR     R0, [R13], #4

 LDR     R1, [R6, R0, LSR #5]		;load relevant word from bitmap table
 MOV     R3, #1
 ORR     R1, R1, R3, LSL R0
 STR     R1, [R6, R0, LSR #5]		;update so we know we've claimed it
LDR     PC, [R13], #4


 ._reclaim
 STMFD   R13!, {R0, R14}
 BL      pass_SWI_on
 SWI     XOS_Claim			;hand it back
 LDR     R0, [R13], #4

 LDR     R1, [R6, R0, LSR #5]		;load relevant word from bitmap table
 MOV     R3, #1
 BIC     R1, R1, R3, LSL R0
 STR     R1, [R6, R0, LSR #5]		;update so we know we've claimed it
LDR     PC, [R13], #4
