;=========================================================
	; gr_copy_to_current, 40x48 version
	;=========================================================
	; copy 0xc00 to DRAW_PAGE
	;
	; 45 + 2 + 120*(8*9 + 5) -1 + 6 = 9292
;.align	$100
gr_copy_to_current:

	lda	DRAW_PAGE					; 3
	clc							; 2
	adc	#$4						; 2
	sta	gr_copy_line+5					; 4
	sta	gr_copy_line+11					; 4
	adc	#$1						; 2
	sta	gr_copy_line+17					; 4
	sta	gr_copy_line+23					; 4
	adc	#$1						; 2
	sta	gr_copy_line+29					; 4
	sta	gr_copy_line+35					; 4
	adc	#$1						; 2
	sta	gr_copy_line+41					; 4
	sta	gr_copy_line+47					; 4
							;===========
							;	45

	ldy	#119		; for early ones, copy 120 bytes	; 2

gr_copy_line:
	lda	$C00,Y		; load a byte (self modified)		; 4
	sta	$400,Y		; store a byte (self modified)		; 5

	lda	$C80,Y		; load a byte (self modified)		; 4
	sta	$480,Y		; store a byte (self modified)		; 5

	lda	$D00,Y		; load a byte (self modified)		; 4
	sta	$500,Y		; store a byte (self modified)		; 5

	lda	$D80,Y		; load a byte (self modified)		; 4
	sta	$580,Y		; store a byte (self modified)		; 5

	lda	$E00,Y		; load a byte (self modified)		; 4
	sta	$600,Y		; store a byte (self modified)		; 5

	lda	$E80,Y		; load a byte (self modified)		; 4
	sta	$680,Y		; store a byte (self modified)		; 5

	lda	$F00,Y		; load a byte (self modified)		; 4
	sta	$700,Y		; store a byte (self modified)		; 5

	lda	$F80,Y		; load a byte (self modified)		; 4
	sta	$780,Y		; store a byte (self modified)		; 5

	dey			; decrement pointer			; 2
	bpl	gr_copy_line	;					; 2nt/3

	rts								; 6



	;=========================================================
	; gr_copy_to_current, 40x48 version
	;=========================================================
	; copy 0x1000 to DRAW_PAGE

gr_copy_to_current_1000:

	lda	DRAW_PAGE					; 3
	clc							; 2
	adc	#$4						; 2
	sta	gr_copy_line_40+5				; 4
	sta	gr_copy_line_40+11				; 4
	adc	#$1						; 2
	sta	gr_copy_line_40+17				; 4
	sta	gr_copy_line_40+23				; 4
	adc	#$1						; 2
	sta	gr_copy_line_40+29				; 4
	sta	gr_copy_line_40+35				; 4
	adc	#$1						; 2
	sta	gr_copy_line_40+41				; 4
	sta	gr_copy_line_40+47				; 4
							;===========
							;	45

	ldy	#119		; for early ones, copy 120 bytes	; 2

gr_copy_line_40:
	lda	$1000,Y		; load a byte (self modified)		; 4
	sta	$400,Y		; store a byte (self modified)		; 5

	lda	$1080,Y		; load a byte (self modified)		; 4
	sta	$480,Y		; store a byte (self modified)		; 5

	lda	$1100,Y		; load a byte (self modified)		; 4
	sta	$500,Y		; store a byte (self modified)		; 5

	lda	$1180,Y		; load a byte (self modified)		; 4
	sta	$580,Y		; store a byte (self modified)		; 5

	lda	$1200,Y		; load a byte (self modified)		; 4
	sta	$600,Y		; store a byte (self modified)		; 5

	lda	$1280,Y		; load a byte (self modified)		; 4
	sta	$680,Y		; store a byte (self modified)		; 5

	lda	$1300,Y		; load a byte (self modified)		; 4
	sta	$700,Y		; store a byte (self modified)		; 5

	lda	$1380,Y		; load a byte (self modified)		; 4
	sta	$780,Y		; store a byte (self modified)		; 5

	dey			; decrement pointer			; 2
	bpl	gr_copy_line_40	;					; 2nt/3

	rts								; 6



	;=========================================================
	; gr_copy_to_current_40x40
	;=========================================================
	; Take image in 0xc00
	; 	Copy to DRAW_PAGE
	;	Actually copy lines 0..39
	; Don't over-write bottom 4 lines of text
gr_copy_to_current_40x40:

	ldx	#0
gc_40x40_loop:
	lda	gr_offsets,x
	sta	OUTL
	sta	INL
	lda	gr_offsets+1,x
	clc
	adc	DRAW_PAGE
	sta	OUTH

	lda	gr_offsets+1,x
	clc
	adc	#$8
	sta	INH

	ldy	#39
gc_40x40_inner:
	lda	(INL),Y
	sta	(OUTL),Y

	dey
	bpl	gc_40x40_inner

	inx
	inx

	cpx	#40
	bne	gc_40x40_loop

	rts								; 6