;
; save and restore system vectors
; originally by Mark Keates
;
; void _save_vecs(void);
; void _rest_vecs(void);
;

	.export	__save_vecs,__rest_vecs
.include	"atari.inc"

	.bss

old_dli:     .res 2
old_dlist:   .res 2
old_vbi:     .res 2
old_vbd:     .res 2
old_gra:     .res 1
old_dma:     .res 1
old_prior:   .res 1
old_cols:    .res 8
old_set:     .res 1
old_rmargin: .res 1	; lmargin saved in startup code

	.code

.proc	__save_vecs

	lda    	VDSLST
	sta	old_dli
	lda	VDSLST+1
       	sta	old_dli+1
	lda    	SDLSTL
	sta	old_dlist
	lda	SDLSTL+1
       	sta	old_dlist+1
	lda    	VVBLKI
	sta	old_vbi
	lda	VVBLKI+1
       	sta	old_vbi+1
	lda    	VVBLKD
	sta	old_vbd
	lda	VVBLKD+1
       	sta	old_vbd+1
	lda	GRACTL
	sta    	old_gra
	lda    	SDMCTL
	sta	old_dma
	lda	GPRIOR
       	sta	old_prior
	lda    	CHBAS
	sta	old_set
	lda    	RMARGN
	sta	old_rmargin

	ldy	#7
SETUP1:
	lda	PCOLR0,y
	sta	old_cols,y
	dey
	bpl	SETUP1
	rts

.endproc

.proc	__rest_vecs

	lda	#6
	ldx	old_vbi+1
	ldy	old_vbi
	jsr	SETVBV
	lda	#7
	ldx	old_vbd+1
	ldy	old_vbd
	jsr	SETVBV
	lda    	old_dli
	sta	VDSLST
	lda	old_dli+1
       	sta	VDSLST+1
	lda    	old_dlist
	sta	SDLSTL
	lda	old_dlist+1
       	sta	SDLSTL+1
	lda    	old_gra
	sta	GRACTL
	lda	old_prior
       	sta	GPRIOR
	lda    	old_dma
	sta	SDMCTL
	lda    	old_set
	sta	CHBAS
	lda	old_rmargin
	sta    	RMARGN
	lda	#$FF
	sta	CH
	ldy	#7
SETUP2:
	lda	old_cols,Y
	sta	PCOLR0,Y
	dey
	bpl	SETUP2
	rts

.endproc

