
		;   TAG.ASM
		;
		;   Tag for PARNET.DEVICE   (Parallel Port Network)
		;
		;   Provides unit vectoring of commands and C layering.

		include "exec/types.i"
		include "exec/exec.i"
		include "exec/resident.i"

		section text,code

		xref	_LVORemTask

		xref	_CDevInit	; C routines for assembly tags
		xref	_CDevOpen
		xref	_CDevClose
		xref	_CDevExpunge
		xref	_LinkerDB	; Lattice C linker A4 base (ea)

		xref	_CParNetTask

		xref	_UnitControlOpen
		xref	_UnitDGramOpen
		xref	_UnitStreamOpen

		xdef	_ParNetTask

		moveq.l #0,D0
		rts

InitDesc:
		dc.w	RTC_MATCHWORD
		dc.l	InitDesc
		dc.l	EndCode
		dc.b	0		;   not auto-init
		dc.b	2		;   version
		dc.b	NT_DEVICE
		dc.b	0		;   priority
		dc.l	_DeviceName
		dc.l	_IdString
		dc.l	_DevInit
		dc.l	0		;   extra ?
		dc.l	0
		dc.l	0


		section __MERGED,DATA

		xdef	_DeviceName	; tag strings
		xdef	_IdString
		xdef	_DeviceVectors	; device vectors
		xdef	_UnitVectors

_DeviceName:	dc.b	'parnet.device',0
_IdString:	dc.b	'parnet.device 2.0 (23 Dec 1990)',13,10,0

		ds.l	0

_DeviceVectors:
		dc.l	_DevOpen
		dc.l	_DevClose
		dc.l	_DevExpunge
		dc.l	0
		dc.l	_DevBeginIO
		dc.l	_DevAbortIO
		dc.l	-1

_UnitVectors:
		dc.l	_UnitControlOpen
		dc.l	_UnitDGramOpen
		dc.l	_UnitStreamOpen

EndCode:
		section text,code

_DevInit:	movem.l A0/A4,-(sp)         ;   A0=segment
		lea	_LinkerDB,A4	    ;	Lattice C
		jsr	_CDevInit
		movem.l (sp)+,A0/A4
		rts

_DevOpen:	movem.l D0/D1/A1/A4,-(sp)   ;   D0=unit, D1=flags, A1=iob
		lea	_LinkerDB,A4
		jsr	_CDevOpen
		addq.l	#4,sp
		movem.l (sp)+,D1/A1/A4
		rts

_DevClose:	movem.l A1/A4,-(sp)         ;   A1=iob
		lea	_LinkerDB,A4
		jsr	_CDevClose
		movem.l (sp)+,A1/A4
		rts

_DevExpunge:	move.l	A4,-(sp)            ;
		lea	_LinkerDB,A4
		jsr	_CDevExpunge
		move.l	(sp)+,A4
		rts

_DevBeginIO:	movem.l A1/A4,-(sp)         ; A1=iob
		move.l	IO_UNIT(A1),A0      ; vector through unit
		move.l	LN_SIZE(A0),A0      ; (see defs.h/Unit)
		lea	_LinkerDB,A4
		jsr	(A0)
		movem.l (sp)+,A1/A4
		rts

_DevAbortIO:	movem.l A1/A4,-(sp)         ; A1=iob
		move.l	IO_UNIT(A1),A0      ; vector through unit
		move.l	LN_SIZE+4(A0),A0    ; (see defs.h/Unit)
		lea	_LinkerDB,A4
		jsr	(A0)
		movem.l (sp)+,A1/A4
		rts

_ParNetTask:
		lea	_LinkerDB,A4
		jsr	_CParNetTask
		move.l	4,A6
		sub.l	A1,A1
		jsr	_LVORemTask(A6)
rt		jmp	rt



		END

