/********************************************************************
****	*Schnelle* Ausgabe von Zeichen im Hintergrund		*****
********************************************************************/

EXPORT	prn_byte, anzahl, ptr, exstall, old_vec
IMPORT	shm_name, Fdelete, Cconws, Supexec, Fselect

	TEXT
; **** Programm durch Signal gekillt! */
exstall:
	TST.L	ptr
	BEQ	no_ex_
	LEA	ex_print(PC),A0
	BSR	Supexec
no_ex_:	LEA	shm_name,A0	; Tempor„re Datei wird z.Zt. nicht gel”scht!
	BSR	Fdelete
	LEA	killed,	A0
	BSR	Cconws
	CLR	-(A7)
	TRAP	#1
	RTS

ex_print:
	CLR.L	anzahl
	BCLR	#0,	$FA09.W	; Ausschalten
	BCLR	#0,	$FA15.W	; Maskieren
	MOVE.L	old_vec,$100.W
	CLR.L	old_vec
	RTS

/* Idee aus ST-Computer 5/92, sehr stark modifiziert */

prn_byte:
	MOVE.L	A0,	ptr
	MOVE.L	D0,	anzahl	; Anzahl
	BLE	no_print

	LEA	i_byte(PC),A0
	BSR	Supexec
no_print:
	RTS

/* Interrupt installieren */
i_byte:
	MOVE.B	#14,	$8800.W		; Strobe aus
	MOVE.B	$8800.W,D0
	BSET	#5,	D0
	MOVE.B	D0,	$8802.W
	MOVE.L	$100.W,	old_vec
	MOVE.L	#p_byte,$100.W
	BCLR	#0,	$FA03.W
	BSET	#0,	$FA09.W	; Anschalten
	BSET	#0,	$FA15.W	; Demaskieren
	MOVE.B	#$FE,	$FA11.W
	MOVE.L	ptr,	A0
	BRA	out

	DC.L	'XBRA'
	DC.L	'DVIR'
old_vec:DC.L	0
/* Ab hier Druck */
p_byte:
	SUBQ.L	#1,	anzahl
	BLE	ende
	MOVEM.L	D0-D1/A0,	-(A7)
	MOVE.L	ptr,	A0
	BSR	out
	MOVEM.L	(A7)+,	D0-D1/A0
	MOVE.B	#$FE,	$FA11.W
	RTE

/* Beenden */
ende:	MOVE.L	old_vec,$100.W
	BCLR	#0,	$FA09.W	; Ausschalten
	BCLR	#0,	$FA15.W	; Maskieren
	CLR.L	old_vec
	RTE

/* Byte ausgeben */
out:
	ORI	#$0700,	SR	
	MOVE.B	#15,	$8800.W
	MOVE.B	(A0)+,	$8802.W
	MOVE.L	A0,	ptr

	MOVE	wait1,	D0
time1:	NOP
	DBRA	D0,	time1

	MOVE.B	#14,	$8800.W
	MOVE.B	$8800.W,D1
	BCLR	#5,	D1
	MOVE.B	D1,	$8802.W
	BSET	#5,	D1

	MOVE	wait2,	D0
time2:	NOP
	DBRA	D0,	time2
	MOVE.B	D1,	$8802.W
	RTS


	DATA
	DC.B	'PATCH:'
wait1:	DC.W	6
wait2:	DC.W	32
killed:	DC.B	27,'H ',7,0

	BSS
anzahl:	DS.L	1
ptr:	DS.L	1
