DRUCK   ASM;---------------------------------
;
; Universeller
; Druckertreiber f}r M001
;		     M003
;		     M021
;
;- ohne Filter
;- ohne Hardcopy-Funktion
;- ohne Druckerinitialisierung
;
;
;		` ML-Soft 08.07.92
;DRUCK.ASM	      bis 20.11.93
;---------------------------------
 
			;M001:
PIO1AD	EQU	04H	;PIO-A Daten
PIO1BD	EQU	05H	;PIO-B Daten
PIO1AS	EQU	06H	;PIO-A Steuer
PIO1BS	EQU	07H	;PIO-B Steuer
 
			;M003:
SIOD	EQU	08H	;SIO-A Daten
SIOS	EQU	0AH	;SIO-A Steuer
CTCS	EQU	0CH	;CTC Kanal 0
 
			;M021:
PIO8AD	EQU	90H	;PIO-A Daten
PIO8BD	EQU	91H	;PIO-B Daten
PIO8AS	EQU	92H	;PIO-A Steuer
PIO8BS	EQU	93H	;PIO-B Steuer
 
ARGN	EQU	0B781H
HCADR	EQU	0B799H
CURSO	EQU	0B7A0H
UOUT1	EQU	0B7BEH
INTV1	EQU	0B7E2H
INTV1L	EQU	0B7E4H
PV1	EQU	0F003H
CRT	EQU	00H
KBD	EQU	04H
KBDZ	EQU	0EH
WAIT	EQU	14H
AHEX	EQU	1CH
OSTR	EQU	23H
MODU	EQU	26H
V24OUT	EQU	47H
 
LF	EQU	0AH
CLS	EQU	0CH
CR	EQU	0DH
ESC	EQU	1BH
;-------
	DW	7F7FH
	DB	'DRUCK',1
 
;Module suchen, Anzeige:
 
	LD	BC,780H ;Schacht 7
MSPR:	IN	A,(C)	;Kennbyte lesen
	LD	HL,M001
	LD	E,1
	CP	0EFH	;M001?
	JP	Z,MS
	LD	HL,M003
	LD	E,3
	CP	0EEH	;M003?
	JP	Z,MS
MSSU:	INC	B	;Schacht + 1
	JR	NZ,MSPR
	LD	A,0CFH	;B Bitbetrieb
	OUT	(PIO8BS),A
	XOR	A	;alles Ausg{nge
	OUT	(PIO8BS),A
	LD	A,55H
	OUT	(PIO8BD),A
	IN	A,(PIO8BD)
	CP	55H	;M021?
	JR	Z,MS21
ERROR:	CALL	PV1
	DB	OSTR
	DB	CR,LF
	DB	' Kein Treiber aktiv!'
	DB	7,CR,LF
	NOP
	RET
MS21:	LD	HL,M021	;Sprungadresse
	LD	E,21H	;Modulnummer
MS:	CALL	PV1
	DB	OSTR
	DB	CR,LF
	DB	' Druck }ber M0',0
	LD	A,E
	CALL	PV1
	DB	AHEX	;Modul
	CALL	PV1
	DB	OSTR
	DB	' (ja/nein)? _',8
	NOP
KEYM:	CALL	KEY
	CP	'N'
	JR	NZ,KEYM1
	LD	A,B
	AND	A
	JR	Z,ERROR
	JR	MSSU
KEYM1:	CP	'J'
	JR	NZ,KEYM
	JP	(HL)	;Ansprung
 
;Druckertreiber M003:
 
M003:	CALL	PV1
	DB	OSTR
	DB	CR,LF
	DB	' Kanal 1 oder 2? _',8
	NOP
KKEY:	CALL	KEY
	SUB	'1'
	JR	C,KKEY	;<1
	CP	3
	JR	NC,KKEY	;>2
	LD	(KAN),A
	LD	IY,(INTV1)	;V.24-
	LD	A,8		;Param.
	LD	(INTV1L),A
	LD	(IY+2),4	;WR 4
	LD	(IY+3),4
	LD	(IY+4),3	;WR 3
	LD	(IY+5),20H
	LD	(IY+6),5	;WR 5
	LD	(IY+7),2AH
	CALL	PV1
	DB	OSTR
	DB	CR,LF
	DB	' Bautrate:',CR,LF
	DB	' (1) 9600     '
	DB	' (5) 600',CR,LF
	DB	' (2) 4800     '
	DB	' (6) 300',CR,LF
	DB	' (3) 2400     '
	DB	' (7) 150',CR,LF
	DB	' (4) 1200     '
	DB	' (8) 110',CR,LF
	DB	' Nummer: _',8
	NOP
BKEY:	CALL	KEY
	SUB	'1'
	JR	C,BKEY	;< 1
	CP	9
	JR	NC,BKEY	;> 8
	PUSH	AF	;Baudrate merk.
	CALL	PV1
	DB	OSTR
	DB	CR,LF
	DB	' Parit{t '
	DB	'(ja/nein)? _',8
	NOP
PKEY:	CALL	KEY
	CP	'N'
	JR	Z,STB
	CP	'J'
	JR	NZ,PKEY
	SET	0,(IY+3) ;Parit{t
	CALL	PV1
	DB	OSTR
	DB	CR,LF
	DB	' gerade oder '
	DB	'ungerade? _',8
	NOP
EKEY:	CALL	KEY
	CP	'U'
	JR	Z,STB
	CP	'G'
	JR	NZ,EKEY
	SET	1,(IY+3)	;gerade
STB:	CALL	PV1
	DB	OSTR
	DB	CR,LF
	DB	' 1 oder 2 '
	DB	'Stoppbits? _',8
	NOP
TKEY:	CALL	KEY
	CP	'1'
	JR	Z,ONE
	CP	'2'
	JR	NZ,TKEY
	SET	3,(IY+3) ;2 Stopbits
ONE:	POP	AF	;Baudrate
	LD	H,A
	CP	2
	JR	C,CMD1
	CP	5
	JR	C,CMD2
CMD1:	LD	A,47H	;CTC - Z{hler
	JR	CTC
CMD2:	LD	A,7	;CTC - Zeitgeber
CTC:	LD	(IY),A
	LD	A,H
	ADD	A,A
	LD	DE,BTAB
	ADD	A,E
	LD	E,A
	LD	A,D
	ADC	A,0
	LD	D,A
	LD	A,(DE)
	LD	(IY+1),A ;Zeitkonst. CTC
	INC	DE
	LD	A,(DE)
	OR	(IY+3)
	LD	(IY+3),A ;Teiler SIO
	CALL	PV1
	DB	OSTR
	DB	CR,LF
	DB	' 7 oder 8 Bits'
	DB	' je Zeichen? _',8
	NOP
CKEY:	CALL	KEY
	CP	'7'
	JR	Z,SEVEN
	CP	'8'
	JR	NZ,CKEY
	SET	6,(IY+7)	;8 Bit
SEVEN:	LD	L,B	;Modulschacht
	LD	D,1	;einschalten
	LD	A,2	;2 Parameter
	CALL	PV1
	DB	MODU
	LD	A,(KAN)
	ADD	A,CTCS
	LD	C,A
	DI
	LD	B,2
	LD	HL,(INTV1)
	OTIR		;CTC init.
	DEC	C
	DEC	C	;SIOS
	LD	B,6
	OTIR		;SIO init.
	LD	HL,PCH3
	LD	(UOUT1),HL
	EI
PRE:	CALL	PV1
	DB	OSTR
	DB	CR,LF
	DB	' Druck erfolgt }ber '
	DB	'USER-Out 2!',CR,LF
	NOP
	RET
 
;Tabelle f}r Baudraten:
BTAB:	DW	5BH	;9600
	DW	0B6H	;4800
	DW	02EH	;2400
	DW	5BH	;1200
	DW	0B6H	;600
	DW	40B6H	;300
	DW	0C05BH	;150
	DW	0C07CH	;110
 
;Tastaturabfrage:
KEY:	CALL	PV1
	DB	KBD
	JR	NC,KEY	;keine Taste
	CP	20H
	JR	C,KEY	;<20H
	CP	60H
	JR	C,KEYA
	SUB	20H	;-> gro~
KEYA:	PUSH	AF
	CALL	PV1
	DB	CRT
	LD	A,8
	CALL	PV1
	DB	CRT
	POP	AF
	RET
 
;Druckertreiber M001:
 
M001:	LD	L,B	;Modulschacht
	LD	D,1	;einschalten
	LD	A,2	;2 Parameter
	CALL	PV1
	DB	MODU
	DI
	LD	A,0CFH	;A Bitbetrieb
	OUT	(PIO1AS),A
	XOR	A	;alles Ausg{nge
	OUT	(PIO1AS),A
	LD	A,0CFH	;B Bitbetrieb
	OUT	(PIO1BS),A
	LD	A,0FEH	;Bit 0 Ausgang
	OUT	(PIO1BS),A
	LD	A,1	;STROBE passiv
	OUT	(PIO1BD),A
	LD	HL,PCH1
	LD	(UOUT1),HL
	EI
	JP	PRE
;-------
 
;Druckertreiber M021:
 
M021:	DI
	LD	A,0CFH	;A Bitbetrieb
	OUT	(PIO8AS),A
	LD	A,7FH	;Bit 7 Ausgang
	OUT	(PIO8AS),A
	LD	A,80H	;STROBE passiv
	OUT	(PIO8AD),A
	LD	HL,PCH8
	LD	(UOUT1),HL
	EI
	JP	PRE
 
PCH1:	PUSH	AF
BUSY1:	IN	A,(PIO1BD)
	BIT	2,A	;BUSY?
	JR	NZ,BUSY1
	POP	AF
	PUSH	AF
	OUT	(PIO1AD),A 	;Zeichen
	XOR	A
	OUT	(PIO1BD),A	;STROBE-
	LD	A,1
	OUT	(PIO1BD),A	;Impuls
	POP	AF
	RET
 
PCH3:	PUSH	BC
	PUSH	AF
	LD	A,(KAN)
	ADD	A,SIOS
BUSY3:	IN	A,(C)
	BIT	2,A		;bereit?
	JR	NZ,PR31		;ja
	LD	A,1
	PUSH	BC
	CALL	PV1
	DB	WAIT
	POP	BC
	JR	BUSY3
PR31:	DEC	C
	DEC	C	;SIOD
	POP	AF
	OUT	(C),A
	POP	BC
	RET
 
KAN:	DB	0	;SIO-Kanal
PCH8:	PUSH	AF
BUSY8:	IN	A,(PIO8AD)
	BIT	6,A	;BUSY?
	JR	NZ,BUSY8
	POP	AF
	PUSH	AF
	OUT	(PIO8BD),A	;Zeichen
	XOR	A
	OUT	(PIO8AD),A	;STROBE-
	LD	A,80H
	OUT	(PIO8AD),A	;Impuls
	POP	AF
	RET
;-------
<
BUSY8:;
PCH8::
KAN:3
PR31:#
BUSY
	OUT	(PIO8AD),A	;STROBE-
	LD	A,80H
	OUT	(PIO8AD),A	;Impuls
	POP	AF
	RET
;-------
<
BUSY8:;
PCH8::
KAN:3
PR31:#
BUSY