*
*	BDOS Function Definitions
*
reboot	   =	0
printstr   =	9
open	   =   15
setdma	   =   26
pgmldf     =   59
gettpa     =   63
*
.globl	_ovhdlr
.xdef	_loadr
	.text
*
_ovhdlr:move	sr,savecc		* save condition codes
	movem.l	d1-d7/a0-a6,saver	* save all registers
	movea.l	(a7)+,a6		* pop pointer to inline parameter
	move.l	#4,d6			* adjust return address
	add.l	a6,d6			*  to skip over table pointer
	move.l	d6,-(a7)		* push return address
*
*	GET FILE NAME AND LOAD PT
*
	movea.l	(a6),a6			* get ovl table address
	move.l	a6,d5			* check address with last loaded
	cmp.l	oldadd,d5		*   if it's the same,
	beq	done			*   file is already loaded.
	move.l	a6,oldadd		* save address for next time
	lea.l	fname,a5		* get address of name in fcb
	move.l	#11,d5			* set up loop counter (l2 cycles)
gfnm:	move.b	(a6)+,(a5)+
	dbf	d5,gfnm
	move.l	(a6),lowadr		* store load point address
*
*	OPEN OVERLAY FILE
*
	move.l	#fcb,d1
	movea.l	d1,a1
	move.w  #open,d0	*put BDOS function number in register d0
	trap	#2		*try to open the file to be loaded
	cmpi	#255,d0		*test d0 for BDOS error return code
	beq	openerr		*if d0 = 255 then goto openerr
	move.b	#0,cr		*zero record number in fcb
*
*	FILL THE LPB
*
	lea	ovbspg,a3	* get address of input buffer 
	move.l	a3,baspag	* put it in LPB
	move.l	a1,LPB		*put address of open FCB into LPB
	move.l	#LPB,a0		*put address of LPB into register a0
	jsr	_loadr		*load the module
	tst	d0		*was the load successful?
	bne	lderr		*if not then print error message
*
*	RESTORE AND RETURN
*
done:	movem.l	saver,d1-d7/a0-a6	* restore all registers
	move	savecc,ccr		* restore condition codes
	rts
*
*	PRINT ERROR MESSAGE
*
openerr:
	move.l	#openmsg,d1	*get address of error message 
*                               *to be printed
	bra	print
lderr:	move.l  #loaderr,d1	*get address of error message to 
*				*be printed
print:	move.w	#printstr,d0	*get BDOS function number
	trap	#2              *print the message
	move.b	#36,ex		*mark end of filename
	move.l	#fname,d1	*get address of filename
	move.w	#printstr,d0	*set up for BDOS call
	trap	#2		*print the filename
cmdrtn: move.w	#reboot,d0	*get BDOS function number
	trap	#2              *warmboot and return to the CCP

*
*	DATA
*
	.data
*
*	ERROR MESSAGE STRINGS
*
	.even
loaderr:	.dc.b  13,10,'Error Loading Overlay File $'
openmsg:	.dc.b  13,10,'Unable to Open Overlay File $'
*
*	BSS
*
	.bss
	.even
oldadd: .ds.l	1		* table for last loaded overlay
savecc:	.ds.w	1
saver:	.ds.l	14
ovbspg:	.ds.w	64		* input buffer (like basepage) for loadr
*
*	FILE CONTROL BLOCK
*
	.even
fcb:	.ds.b	1		* file control block
fname:	.ds.b	11
ex:	.ds.b	1
sysjnk: .ds.b	19
cr:	.ds.b	1
*
*	LOAD PARAMETER BLOCK
*
	.even
LPB:	   .ds.l	1      *FCB address of program file
lowadr:    .ds.l	1      *Low boundary of area in which 
*                              *to load program
hiadr:	   .ds.l	1      *High boundary of area in which to 
*                              *to load program
baspag:	   .ds.l	1      *Base page address of loaded program
usrstk:	   .ds.l	1      *Loaded program's initial stack pointer
flags:	   .ds.w	1      *Load program function control flags
	.end
