	USING	0

;-------------------------------------------------------------------------------;
; Preserve registers								;
;-------------------------------------------------------------------------------;
SAVE_CONTEXT:
	PUSH	ACC
	PUSH	AR0
	MOV	R0,SP
	PUSH	AR1
	PUSH	AR2
	PUSH	AR3
	PUSH	AR4
	PUSH	AR5
	PUSH	AR6
	PUSH	AR7
	DEC	R0
	DEC	R0
	DEC	R0
	MOV	A,DPH
	XCH	A,@R0
	PUSH	ACC
	INC	R0
	MOV	A,DPL
	XCH	A,@R0
	PUSH	ACC
	INC	R0
	MOV	A,@R0
	INC	R0
	MOV	AR0,@R0
	RET

;-------------------------------------------------------------------------------;
; Restore registers								;
;-------------------------------------------------------------------------------;
RESTORE_CONTEXT:
	POP	DPL
	POP	DPH
	POP	AR7
	POP	AR6
	POP	AR5
	POP	AR4
	POP	AR3
	POP	AR2
	POP	AR1
	MOV	R0,SP
	DEC	R0
	DEC	R0
	DEC	R0
	MOV	A,DPH
	XCH	A,@R0
	MOV	DPH,A
	INC	R0
	MOV	A,DPL
	XCH	A,@R0
	MOV	DPL,A
	POP	AR0
	POP	ACC
	RET