	PAGE 70

;	SETUP.MAC
;
;	initialisiert die serielle Schnittstelle SIO-A (Ports 4 und 6)
;	auf der CPU/IEC.
;
;	Fuer Druckerausgabe ueber die SIO-A ist zusaetzlich noch das 
;	IO-Byte zu aendern (Programm RS232.COM).

;	Die Baudraten-Generierung wird durch die Piggy Pack-Schaltung
;	auf dem CPU-Board vorgenommen. Durch die Datenleitung B0 
;	der PIO (Ports 1 und 3) wird die Grundfrequenz gewaehlt, die
;	endgueltige Baudrate wird mit dem SIO-Teiler spezifiziert.

;			SIO x1		 x16	 x32	 x64
;	PIO B0 = 0:	(153600)	9600    4800	2400
;	PIO B0 = 1:	  19200		1200	 600	 300

;	Ferner koennen eingestellt werden:
;	Bits/Char	7 / 8
;	Stopbits	1 / 2
;	Parity		no / odd / even
;	CTS-Check	yes / no		

;	Das Programm geht von folgenden Default-Einstellungen aus:
;	1200 bd, 8 Bits-Char, 1 Stopbit, no Parity, CTS-Check

;	ACHTUNG !
;	Der CTS-Check steht nach dem Kaltstart im BIOS bei F390-99.
;	SETUP ueberschreibt die Sequenz mit NOP bzw. setzt wieder 
;	das Original ein.

	.Z80
	ENTRY SETUP

SETUP:	JP START

BDOS	EQU 5		;BDOS EINSPRUNG
SIOAC	EQU 6		;SIO-A CONTROL PORT
SIOAD	EQU 4		;SIO-A DATA PORT
PIOBC	EQU 3		;PIO-B CONTROL PORT
PIOBD	EQU 1		;PIO-B DATA PORT

SIOREG:	DB 11011000B	;RESET
	DB 4,01000100B	;x16 CLOCK, 1 STOP BIT, NO PARITY
	DB 1,00000000B	;NO INTERRUPTS
	DB 3,11000001B	;Rx 8 BIT/CHAR 
	DB 5,01101000B	;Tx 8 BIT/CHAR 
SIOLEN	EQU $-SIOREG

PIOB0:	DB 1		;PIO B0 OUTPUT BYTE

CRLF:	DB 0DH,0AH,'$'

;--------------- Ausgabe-Strings ------------------

HEADER:	DB 0CH
	DB '***** SETUP  -  Version 1.2  19.03.86 *****'
	DB '$'

DEFMSG: DB 0DH,0AH,0AH
	DB 'SIO-A (Ports 04/06) - Default Parameter'
	DB 0DH,0AH
	DB '1200 Bd, 8 Bits/Char, 1 Stop Bit, No Parity, CTS'
	DB '$'

CHGMSG:	DB 0DH,0AH,0AH
	DB 'Change parameters ? (Y/N)  '
	DB '$'

BAUMSG:	DB 0DH,0AH,0AH
	DB 'Baudrate (1=300  2=600  3=1200  4=2400  5=4800  6=9600  7=19200)  '
	DB '$'

BITMSG:	DB 0DH,0AH
	DB 'Bits per char (7/8)  '
	DB '$'

STOMSG:	DB 0DH,0AH
	DB 'Stopbits (1/2)  '
	DB '$'

PARMSG:	DB 0DH,0AH
	DB 'Parity (0=no  1=odd  2=even)  '
	DB '$'

CTSMSG:	DB 0DH,0AH
	DB 'CTS-Check (Y/N)  '
	DB '$'

ENDMSG:	DB 0DH,0AH,0AH
	DB '***** SIO-A initialized *****'
	DB 0DH,0AH,0AH
	DB '$'

;--------------- PROGRAMM-ANFANG ------------------
		
START:	LD DE,HEADER	;MELDUNG
	CALL PRINT

	LD DE,DEFMSG	;DEFAULT PARAMETER ZEIGEN
	CALL PRINT

ASKCHG:	LD DE,CHGMSG	;PARAMETER AENDERN?
	CALL PRINT
	CALL INPUTM
	SUB 'N'
	JP Z,SETSIO	;NEIN, SIO MIT DEFAULT SETZEN.
	SUB 'Y'-'N'
	JR NZ,ASKCHG

ASKBAU:	LD DE,BAUMSG	;BAUDRATE
	CALL PRINT
	CALL INPUT
	LD HL,SIOREG+2	;-> WRITE REG.4
	LD B,1		;PIO-B0 = 1
	CP '1'		;FUER
	JP Z,X64	;300 BD
	CP '2'
	JP Z,X32	;600 BD
	CP '3'
	JP Z,X16	;1200 BD
	CP '7'
	JP Z,X1		;19200 BD
	DEC B		;PIO-B0 = 0
	CP '4'		;FUER
	JP Z,X64	;2400 BD
	CP '5'
	JP Z,X32	;4800 BD
	CP '6'
	JP Z,X16	;9600 BD
	JP ASKBAU
X1:	RES 7,(HL)
	RES 6,(HL)
	JP SETPIO
X16:	RES 7,(HL)
	SET 6,(HL)
	JP SETPIO
X32:	SET 7,(HL)
	RES 6,(HL)
	JP SETPIO
X64:	SET 7,(HL)
	SET 6,(HL)
SETPIO:	LD A,B
	LD (PIOB0),A

ASKBIT:	LD DE,BITMSG	;BITS PER CHAR
	CALL PRINT
	CALL INPUT
	CP '7'
	JP Z,BIT7
	CP '8'
	JP Z,BIT8
	JP ASKBIT
BIT7:	LD HL,SIOREG+6	;-> WRITE REG.3
	RES 7,(HL)
	LD HL,SIOREG+8	;-> WRITE REG.5
	RES 6,(HL)
BIT8:
ASKSTO:	LD DE,STOMSG	;STOPBITS
	CALL PRINT
	CALL INPUT
	LD HL,SIOREG+2	;-> WRITE REG.4
	CP '1'
	JP Z,STOP1
	CP '2'
	JP Z,STOP2
	JP ASKSTO
STOP2:	SET 3,(HL)
STOP1:
ASKPAR:	LD DE,PARMSG	;PARITY
	CALL PRINT
	CALL INPUT
	LD HL,SIOREG+2	;-> WRITE REG.4
	CP '0'
	JP Z,NOPAR
	CP '1'
	JP Z,ODPAR
	CP '2'
	JP Z,EVPAR
	JP ASKPAR
EVPAR:	SET 1,(HL)
ODPAR:	SET 0,(HL)
NOPAR:
ASKCTS:	LD DE,CTSMSG	;CTS-CHECK
	CALL PRINT
	CALL INPUTM
	LD HL,CTSCHK	;ADRESSE IM BIOS
	SUB 'N'
	JP Z,CTSNO
	SUB 'Y'-'N'
	JP Z,CTSYES
	JP ASKCTS

CTSNO:	LD B,CTSYE2-CTSYE1	;BYTES
	XOR A			;LOESCHEN
CTSNO1:	LD (HL),A
	INC HL
	DJNZ CTSNO1
	JP SETSIO
CTSYES: LD BC,CTSYE2-CTSYE1	;BZW.
	LD DE,CTSYE1		;RESTAURIEREN
	EX DE,HL
	LDIR
	JP SETSIO

CTSCHK	EQU 0F390H	;ADRESSE IM BIOS
CTSYE1: LD A,10H	;ORIGINAL BIOS-SEGMENT
	OUT (SIOAC),A
	IN A,(SIOAC)
	BIT 5,A
	JR Z,CTSYE1	;BIS HIER
CTSYE2	EQU $

SETSIO:	LD A,0FH	;PIO-B ALS OUTPUT DEF.
	OUT (PIOBC),A
	LD A,(PIOB0)	;PIO-B0 WERT
	OUT (PIOBD),A
	LD HL,SIOREG	;SIO-A REGISTER SCHREIBEN
	LD B,SIOLEN
	LD C,SIOAC
	OTIR

	LD DE,ENDMSG
	CALL PRINT
	JP EXIT		;FETTIG!

;--------------- SUBROUTINEN ----------------------

INPUT:	PUSH BC		;1 BUCHSTABEN VON CONSOLE
	PUSH DE
	PUSH HL
	LD C,1
	CALL BDOS
	POP HL
	POP DE
	POP BC
	RET

INPUTM:	CALL INPUT
	AND 01011111B	;ZU GROSSBUCHST. MASKIEREN
	RET

PRINT:	LD C,9		;STRING OUTPUT AUF CONSOLE
	CALL BDOS
	RET

;--------------- PROGRAMM-ENDE --------------------

EXIT:	JP 0		;WARMBOOT

PRGEND	EQU $

	END
