;page3 to page2
;Feb.6/2001  K-ichi



reg_prislt	defl	0a8h		;primary slot register(I/O)
reg_extslt	defl	0ffffh		;extended slot register(mem.mapped)

rom_calslt	equ	1ch		;inter slot call
rom_enaslt	equ	24h		;slot enabler

usrtab	equ	0f39ah			;USR function area
ramslt	defl	usrtab			;defusr0=RAM(page1) slot
datslt	defl	usrtab+2		;defusr1=ROM(page3) slot
exptbl	equ	0fcc1h			;MAIN-ROM slot

prog	equ	4000h
old_sp	equ	8000h-2


	cseg


start::
	ld	a,(ramslt)
	push	af
	ld	h,40h
	call	rom_enaslt		;enable slot & di
xxx:
	dec	sp
	dec	sp
	pop	hl			;hl=xxx
	ld	bc,prog_dat-xxx
	add	hl,bc			;hl=prog_dat
	ld	de,prog
	ld	bc,prog_len
	ldir
	ld	a,(datslt)
	ld	(p3),a

	ld	a,(exptbl)
	ld	h,40h
	call	rom_enaslt

	ld	ix,start2
	pop	iy
	call	rom_calslt
	ei
	ret


prog_dat:

	.phase	prog

p3:
	db	83h
start2:
	di
	ld	hl,0
	add	hl,sp
	ld	(old_sp),hl		;save SP
	ld	sp,old_sp		;set new SP

	in	a,(reg_prislt)
	push	af			;save prislt-reg

	and	00111111b
	ld	c,a
	ld	a,(p3)
	rrca
	rrca
	and	11000000b
	or	c
	out	(reg_prislt),a
	ld	a,(p3)
	rlca
	jr	nc,copy

	rlca
	rlca
	rlca
	and	11000000b
	ld	c,a
	ld	a,(reg_extslt)
	cpl
	push	af			;save extslt-reg
	and	00111111b
	or	c
	ld	(reg_extslt),a
copy:
	ld	bc,4000h
	ld	de,8000h
	ld	hl,0c000h
	ldir

	ld	a,(p3)
	rlca
	jr	nc,rst_prislt

	pop	af
	ld	(reg_extslt),a		;restore extslt-reg
rst_prislt:
	pop	af
	out	(reg_prislt),a		;restore prislt-reg

	pop	hl
	ei
	ld	sp,hl			;restore SP
	ret

	.dephase

prog_len	defl	$-prog_dat


	ds	16-(($-start) mod 16),0ffh


	end
