.export MSEND
.import iorec

MSEND:          move.l  A0,BUF       	;Datenbereich
                move.w  D0,COUN1        ;anzahl Bytes zu bertragen
                movem.l D2-D4/A2-A3,-(SP)        ;REGISTER RETTEN
*SENDE ANZAHL BYTES UEBER MIDI
				bsr.s   PACKS
MBACK:          movem.l (SP)+,D2-D4/A2-A3        ;REGISTER ZURUECKSCHREIBEN
                rts

*SENDESCHLEIFE FUER seriell

PACKS:			clr.l   D0	
                move.w  COUN1,D0    ;D0= LEN
                subq.w	#1,d0		;Nur COUN-1 Bytes in den Puffer
                beq.s   EPACK           ; GOTO ENDE
                movea.l BUF,A1   ;A1= ^ARRAY OF BYTE
                movea.l  iorec,A2
                movea.l (A2),A3         ;Sendepuffer
                move.w  4(A2),D3        ;size
				
PLOOP0:         move.w  8(A2),D2        ;schreibzeiger
                move.w  6(A2),D4        ;lesezeiger

PLOOP1:         addq.w  #1,D2
                cmp.w   D2,D4
                beq.s   PLOOP0
                cmp.w   D2,D3
                bne.s   PBYTE
       
                moveq   #0,D2
PBYTE:          move.b  (A1)+,0(A3,D2.w)
				move.w  D2,8(A2)
                dbcs     D0,PLOOP1
* COUN-1 Bytes im Puffer. Das letzte normal ber BS
* aktiviert shn den Interrupt, wie es sich gehrt.
                move.b	 (a1),d0	;Das letzte Zeichen
                move.w	 d0,-(SP)	
                move.w   #1,-(SP)	;Device = 1
                movea.l	 $582,A0	;XCONOUT
                jsr		(a0)		
                addq.l	 #4,sp
EPACK:          rts

			
COUN1:		dc.w	0
BUF:		dc.l	0