	subroutine wang
#
# ermoeglicht den Datentransfer zum WANG.
# Initialisiert die SIO-A, fragt nach dem Request to send-Flag und
# speichert es in Bank 1 ab.
#
# Entwurf und Programierung	A.Herrmann
#
# Version 1.0	17.07.84
#
# Verwendete externe Routinen, die nicht in FORLIB sind:
# Name		File,Bibliothek
# storeb	BANKLIB		schreibt ein Byte in Bank 1
#
define	BADR x'1000'	# Basisadresse in Bank 1
define	SIOAC 6		# SIO-A Control Port 
define	SIOAD 4		# SIO-A Data Port
define	BLANK x'20'
define	RTS   1		# Request to Send Code
define	EOR   3		# End of Record
define	EOS   5		# End of Section
define	EOT   6		# End of Transfer
define	SLMAX 10	# max.Stringlaenge
#
logical	wait		# Flag "Wait for Request to Send"
#
byte	wr(9)		# SIO Write Register
byte	sl		# Stringlaenge
byte	char,yes	# Eingabezeichen, Yes
#
integer	i
#
common	/flag/wait
#
data	yes/'Y'/
data	wr(1)/x'd8'/,		# Channel Reset
	wr(2),wr(3)/4,x'c4'/,	# Reg 4 = x64 clock, 1 stop bit, no parity
	wr(4),wr(5)/5,x'ea'/,	# Reg 5 = dtr, 8 bit/char, transmit enable, rts
	wr(6),wr(7)/3,x'c1'/,	# Reg 3 = 8 bit/char, receive enable
	wr(8),wr(9)/1,x'00'/	# Reg 1 = no interrupts
#
#	SIO-A initialisieren
#
for (i=1; i<=9; i=i+1)
[	j=wr(i) ; call out(SIOAC,j) ]
write (1,10)
10 format(' WANG - SIO-A Okay')
#
write(1,16)
16 format(' Warten auf RTS ? (Y/N) ')
read(1,18) char
18 format(a1)
if (char==yes) wait=.true.
else wait=.false.
#
i=BADR+7			# Adresse in Bank 1
call storeb(wait,i)
write(1,20) wait
20 format(' WANG - RTS = ',l5)
return
end


	subroutine getrts
#
# holt das Wait-Flag aus Bank 1 in den Common-Block flag.
#
# Verwendete externe Routinen, die nicht in FORLIB sind:
# Name		File,Bibliothek
# loadb		BANKLIB		liest ein Byte aus Bank 1
#
logical	wait		# Flag "Wait for Request to Send"
integer	i
#
common	/flag/wait
#
i=BADR+7		# Adresse in Bank 1
call loadb(wait,i)
return
end


	subroutine wrts
#
# wartet auf das Request To Send-Zeichen vom WANG.
#
# Verwendete externe Routinen, die nicht in FORLIB sind:
# Name		File,Bibliothek
# keybd		KEYBD		fragt nach Keyboard-Eingabe
#
logical	wait		# Flag "Wait for Request to Send"
logical break		# Flag "Break from Keyboard"
byte	byt,		# Empfangs-Byte
	rr0,		# SIO Read Register No.0
	rflag		# Receive Flag
common	/flag/wait
data	rflag/x'01'/
#
if (.not.wait) return
repeat
[	rr0=inp(SIOAC)
	rr0=rr0.and.rflag
	call keybd(break)
] until (rr0<>0 !! break)
if (.not.break) byt=inp(SIOAD)
return
end


	subroutine send(byt)
#
# sendet das Byte byt ueber die SIO.
#
byte	byt,
	rr0,		# SIO Read Register No.0
	eflag		# Empty-Flag
data	eflag/x'04'/
#
repeat				# Transmit Buffer empty?
[	rr0=inp(SIOAC)
	rr0=rr0.and.eflag
] until (rr0<>0)
write (1,10) byt
10 format ('+^',i3)
call out(SIOAD,byt)		# Byte senden
return
end


	subroutine sendq(byt)
#
# sendet das Byte byt schnell ueber die SIO (ohne es zu drucken).
#
byte	byt,
	rr0,		# SIO Read Register No.0
	eflag		# Empty-Flag
data	eflag/x'04'/
#
repeat				# Transmit Buffer empty?
[	rr0=inp(SIOAC)
	rr0=rr0.and.eflag
] until (rr0<>0)
call out(SIOAD,byt)		# Byte senden
return
end


	subroutine sndrpt(rx,ry)
#
# sendet die Zentralpunktkoord. ueber die SIO.
#
# Verwendete externe Routinen, die nicht in FORLIB sind:
# Name		File,Bibliothek
# wrts		WANG		wartet auf Request to send
# send		WANG		sendet ein Byte ueber die SIO
#
# Version 1.1	21.07.84
#
integer	xanz,yanz	# tatsaechl.Bildgrenzen
integer	rx,ry		# Zentralpunktkoord.
#
common	/bild/xanz,yanz
#
write(1,10)
10 format(' SNDRPT')
call wrts 
write(1,20) rx,ry
20 format('       Zentralpunkt',2i4)
call send(rx) ; call send(ry)
return
end
