
	include	exec/types.i
	include	exec/initializers.i
	include	exec/libraries.i
	include	exec/lists.i
	include	exec/alerts.i
	include	exec/resident.i
	include	exec/exec_lib.i
	include	libraries/dos.i
	include	rdc_macros.i

	STRUCTURE bkemulBase,LIB_SIZE
	UWORD	unused
	ULONG	_bb_SysBase
	ULONG	_bb_SegList
	ULONG	_bb_ColorTable
	ULONG	_bb_ROM
	LABEL	bkemulBase_SIZEOF

	section	main,code

start	moveq.l	#-1,d0
	rts

romtag	dc.w	RTC_MATCHWORD
	dc.l	romtag
	dc.l	endcode
	dc.b	RTF_AUTOINIT	; RT_FLAGS
	dc.b	1		; RT_VERSION
	dc.b	NT_LIBRARY	; RT_TYPE
	dc.b	0
	dc.l	libname		; RT_NAME
	dc.l	IDstring	; RT_IDSTRING
	dc.l	initTable	; RT_INIT

libname		dc.b	'bkemul_resident',0
IDstring	dc.b    'bkemul resident 1.0 (26.1.98)',13,10,0

	even

initTable
	dc.l	bkemulBase_SIZEOF ; size of library base data space
	dc.l	funcTable         ; pointer to function initializers
	dc.l	dataTable         ; pointer to data initializers
	dc.l	initRoutine       ; routine to run

funcTable
	dc.l	Open
	dc.l	Close
	dc.l	Expunge
	dc.l	Null
	dc.l	-1

dataTable
	INITBYTE	LN_TYPE,NT_LIBRARY
	INITLONG	LN_NAME,libname
	INITBYTE	LIB_FLAGS,LIBF_SUMUSED!LIBF_CHANGED
	INITWORD	LIB_VERSION,1
	INITWORD	LIB_REVISION,0
	INITLONG	LIB_IDSTRING,IDstring
;	INITLONG	_bb_ROM,ROM_image
	dc.l		0

initRoutine
	movem.l	d1-a6,-(sp)
	move.l	d0,a5
	move.l	a6,_bb_SysBase(a5)
	move.l	a0,_bb_SegList(a5)
	move.l	#$40000,d0
	clr.l	d1
	CALLSYS	AllocVec
	move.l	d0,_bb_ColorTable(a5)	; error not checked yet
	move.l	#ROM_image,_bb_ROM(a5)
	move.l	d0,a0
	move.l	#$10000-1,d0
	clr.l	d1
10$	move.l	d1,d2
	moveq.l	#7,d5
	clr.w	d3
	clr.w	d4
20$	roxr.w	#1,d2
	roxl.w	#1,d3
	roxr.w	#1,d2
	roxl.w	#1,d4
	dbf	d5,20$
	rol.w	#8,d4
	or.w	d3,d4
	move.w	d4,(a0)+
	addq.l	#1,d1
	dbf	d0,10$
	move.l	a0,a1
	add.l	#$20000,a1
	move.w	#255,d0
50$	move.b	d0,d2
	moveq.l	#3,d4
60$	roxr.w	#1,d2
	roxl.w	#1,d3
	roxr.w	#1,d2
	roxl.w	#1,d3
	dbf	d4,60$
	move.b	d3,-(a1)
	dbf	d0,50$
	move.l	a1,a2
	move.w	#255,d0
70$	move.w	#127,d1
	move.l	a1,a3
	move.b	(a2)+,d2
80$	move.b	(a3)+,(a0)+
	move.b	d2,(a0)+
	move.b	(a3)+,(a0)+
	move.b	d2,(a0)+
	dbf	d1,80$
	dbf	d0,70$
	move.l	a5,d0
	movem.l	(sp)+,d1-a6
	rts

Open	addq.w	#1,LIB_OPENCNT(a6)
	move.l	a6,d0
	rts

Close	clr.l	d0
	subq.w	#1,LIB_OPENCNT(a6)
	rts

Expunge	tst.w	LIB_OPENCNT(a6)
	bne.s	Null
	movem.l	d1-a6,-(sp)
	move.l	a6,a5
	move.l	_bb_SysBase(a5),a6
	move.l	a5,a1
	move.l	(a1)+,a0
	move.l	(a1),a1
	move.l	a0,(a1)
	move.l	a1,LN_PRED(a0)
	clr.l	d0
	move.l	a5,a1
	move.w	LIB_NEGSIZE(a5),d0
	sub.l	d0,a1
	add.w	LIB_POSSIZE(a5),d0
	CALLSYS	FreeMem
	move.l	_bb_ColorTable(a5),a1
	CALLSYS	FreeVec
	move.l	_bb_SegList(a5),d0
	movem.l	(sp)+,d1-a6
	rts

Null	clr.l	d0
	rts

ROM_image	incbin	bk_rom

endcode

	END
