; $VER: ABoot.a v1.0 by Mauro Panigada
;
; ABoot v1.0
; written by Mauro Panigada
;
; Reads and executes bootblock. FREEWARE.
;

		incdir	"dh0:progr/assem/include/"
		include	"exec/types.i"
		include	"exec/exec.i"
		include	"exec/exec_lib.i"
		include	"devices/trackdisk.i"


_LVOWrite	EQU	-48
_LVOOutput	EQU	-60


CALL		MACRO
		jsr	_LVO\1(a6)
		ENDM

		bra.s	main

		dc.b	"$VER: ABoot V1.0 by Mauro Panigada",0
		even

main		movea.l	4.w,a6
		lea	dosname(pc),a1
		moveq	#0,d0
		CALL	OpenLibrary
		tst.l	d0
		bne.s	dosok
		rts

dosok		move.l	d0,a6
		CALL	Output
		move.l	d0,d1
		move.l	#message,d2
		move.l	#len,d3
		CALL	Write
		move.l	a6,a1
		movea.l	4.w,a6
		CALL	CloseLibrary

busy_loop	btst.b	#6,$bfe001
		bne.s	busy_loop

		lea	devport,a1
		bsr	_CreatePort
		lea	trackname(pc),a0
		moveq	#0,d0
		lea	devIO,a1
		moveq	#0,d1
		CALL	OpenDevice

		lea	devIO,a0
		lea	devport,a1
		move.l	a1,MN_REPLYPORT(a0)

		lea	devIO,a1
		move.l	#memory,IO_DATA(a1)
		move.w	#CMD_READ,IO_COMMAND(a1)
		clr.l	IO_OFFSET(a1)
		move.l	#1024,IO_LENGTH(a1)
		CALL	DoIO

		lea	devIO,a1
		jmp	memory+12


dosname		dc.b	'dos.library',0
		even
trackname	dc.b	'trackdisk.device',0
		even
message		dc.b	'Inserisci il disco in df0: e premi il pulsante si'
		dc.b	'nistro del mouse.',10
len		EQU	*-message
		even


*==========================================================================

freeport1	move.l	(sp)+,a1
		moveq	#0,d0
		rts

_CreatePort	move.l	a1,-(sp)
		moveq	#-1,d0
		CALL	AllocSignal
		moveq	#-1,d1
		cmp.l	d1,d0
		beq	freeport1
		move.l	(sp),a0
		move.b	#0,LN_PRI(a0)
		move.b	#NT_MSGPORT,LN_TYPE(a0)
		move.b	#PA_SIGNAL,MP_FLAGS(a0)
		move.b	d0,MP_SIGBIT(a0)
		suba.l	a1,a1
		CALL	FindTask
		move.l	(sp),a1
		move.l	d0,MP_SIGTASK(a1)
		lea	MP_MSGLIST(a1),a0
		NEWLIST	a0
		move.l	(sp)+,d0
		rts


		SECTION	mem,BSS_C

devport		ds.b	MP_SIZE
devIO		ds.b	IOSTD_SIZE
memory		ds.b	1024

		END