V24K6313ASM;	Treiber V24K6313.KCC
;
;	BA00 C000 BA0A
;
;			` ml 10.08.91
;------------------------------------
ARGN	EQU 0B781H
ARG4	EQU 0B788H
HCADR	EQU 0B799H
STBT	EQU 0B7A2H
OUTAB	EQU 0B7B9H
UOUT1	EQU 0B7BEH
UOUT2	EQU 0B7C4H
PV1	EQU 0F003H
CRT	EQU 00H
WAIT	EQU 14H
ERRM	EQU 19H
MODU	EQU 26H
PADR	EQU 34H
;
SIOD	EQU 08H		;SIO-A Daten
SIOS	EQU 0AH		;SIO-A Steuer
CTC	EQU 0CH		;CTC Kan. 0
;------------------------------------
	ORG 0BA00H
;
;Initialisierungsdaten CTC
;
;  9600Bd, 8Bit, 1Stopp-Bit
;
BA00:	DEFB 47H
	DEFB 5BH
;
;Initialisierungsdaten SIO
;
	DEFB 04H	;WR 4
	DEFB 04H
	DEFB 03H	;WR 3
	DEFB 20H
	DEFB 05H	;WR 5
	DEFB 6AH
;
BA08:	DEFB 8	;Einstellung:
;		 -----------
	;Bit 0	Hardcopy/Protokoll
	;Bit 1	USER Kanal
	;Bit 2	SIO-Kanal
	;Bit 3	SHFT-CLR
BA09:	DEFB 8		;Modulschacht
;-------
START:	JP  0BA5CH
;
;Initialisierungsdaten Drucker:
;
BA0D:	DEFB 1BH
	DEFB 43H
	DEFB 00H
	DEFB 0BH
	DEFB 1BH
	DEFB 4EH
	DEFB 05H
	DEFB 1BH
	DEFB 4DH
	DEFB 0AH
	DEFB 0DH
	DEFB 09H
;
BA19:	DEFB 09H	;letztes Zei.
;-------
	DEFW 7F7FH
	DEFM 'V24K6313'
	DEFB 1
	LD A,(ARGN)
	CP 4
	JR C,BA5C	;keine 4 Arg.!
	LD A,L
	LD (BA09),A	;Modulschacht
	LD A,E
	DEC A
	AND 1		;SIO-Kanal
	LD A,(BA08)
	RES 2,A
	JR Z,BA3D
	SET 2,A
BA3D:	LD B,A
	LD A,C
	SUB 2		;USER Kanal
	RES 1,B
	JR Z,BA47
	SET 1,B
BA47:	LD A,(ARG4)	;SHIFT-CLR
	RES 0,B
	RES 3,B
	AND A
	JR Z,BA58
	SET 3,B		;Protokoll
	DEC A
	JR Z,BA58
	SET 0,B		;Hardcopy
BA58:	LD A,B
	LD (BA08),A	;Einstellung
BA5C:	LD A,(BA09)
	LD B,A		;Modulschacht
	LD C,80H
	IN A,(C)	;Strukturbyte
	CP 0EEH		;M003 ?
	JR Z,BA6D
	CALL PV1
	DEFB ERRM	;ERROR !
	RET
;
BA6D:	LD L,B
BA6E:	LD A,2		;UP-Nr.!
	LD D,1
	LD E,D
BA73:	CALL PV1
	DEFB MODU	;M003 aktiv
	CALL BAA6	;Pointer setzen
	BIT 3,A
	JR Z,BA84	;kein SHIFT-CLR
	LD HL,BACD	;Hardcopy
	LD (HCADR),HL
BA84:	CALL BAC0	;Kanalauswahl
	LD A,CTC
	PUSH BC
	ADD C
	LD B,2
	LD C,A		;Portadr. CTC
	LD HL,BA00
	DI
	OTIR		;Init CTC
	POP BC
	LD A,SIOS
	ADD C
	LD C,A		;Portadr. SIO
	LD B,6
	OTIR		;Init SIO
	EI
	LD HL,BA0D
	LD B,12
	JP BB62		;Init Drucker
;
;Pointer fuer Ausgabe setzen
;
BAA6:	LD HL,BAF9	;UP 00 (CRT)
	LD DE,BAFB
BAAC:	LD A,(BA08)
	LD (OUTAB),HL
	BIT 1,A		;USER-Kanal?
	JR NZ,BABB
	LD (UOUT1),DE
	RET
BABB:	LD (UOUT2),DE
	RET
;
;Kanalauswahl SIO
;
BAC0:	PUSH AF
	LD A,(BA08)
	BIT 2,A		;SIO-Kanal?
	LD C,1
	JR NZ,BACB
	DEC C
BACB:	POP AF
	RET
;
;Aufruf durch SHIFT-CLR
;
BACD:	PUSH HL
	PUSH DE
	LD A,(BA08)
	BIT 0,A		;Hardcopy?
	JP NZ,BB6A
	LD HL,(OUTAB)
	INC (HL)
	DEC (HL)
	JR NZ,BAF0	;Prot. -> off
	LD DE,BAF5	;Prot. on
	LD HL,BA6E+1	;UP 02 (UOT1)
	BIT 1,A		;USER Kanal?
	JR Z,BAEA
	LD L,BA73+1	;UP 03 (UOT2)
BAEA:	CALL BAAC	;Pointer neu
BAED:	POP DE
	POP HL
	RET
BAF0:	CALL BAA6	;Pointer setzen
	JR BAED
;
BAF5:	PUSH AF
	CALL PV1
BAF9:	DEFB CRT
	POP AF
BAFB:	PUSH AF
	LD A,(STBT)
	BIT 3,A
	JR Z,BB14	;Steuerz. druck.
	POP AF
	PUSH AF
	CP 7EH
	JR NC,BB0D	;wenn > 7EH
	CP 20H
	JR NC,BB2E	;Druck Zeichen
BB0D:	LD A,'_'	;bei Steuerzei.
BB0F:	CALL BB2D	;Druck Zeichen
	POP AF
	RET
BB14:	POP AF
	CP 0FH
	JR Z,BB25	;SHIFT-CLR
	CP 0DH
	JR NZ,BB2D	;Druck Zeichen
	PUSH AF
	CALL BB2D	;Druck Zeichen
	LD A,9		;CR ohne LF!
	JR BB0F
;
BB25:	LD A,(BA19)	;letztes Zeich.
	CP 1BH		;ESC?
	LD A,0FH
	RET NZ		;ESC+0FH drucken
BB2D:	PUSH AF
BB2E:	PUSH BC
	CALL BAC0	;Kanalauswahl
	LD A,SIOS
	ADD C
	LD C,A		;Portadr. SIO
	IN A,(C)
	BIT 2,A		;Puffer leer
	JR NZ,BB45
	LD A,1
	CALL PV1
	DEFB WAIT
	POP BC
	JR BB2E
BB45:	POP BC
	POP AF
	PUSH BC
	PUSH AF
	CALL BAC0	;Kanalauswahl
	LD A,SIOD
	ADD C
	LD C,A		;Portadr. SIO
	POP AF
	OUT (C),A	;Ausgabe
	POP BC
	LD (BA19),A	;letztes Zei.
	RET
;-----------------------
;
;Initialisierung Drucker fuer Hardcopy
;
BB58:	DEFB 0DH
	DEFB 09H
	DEFB 1BH
	DEFB 4AH
	DEFB 18H
	DEFB 1BH
	DEFB 2AH
	DEFB 05H
	DEFB 40H
	DEFB 01H
;
BB62:	LD A,(HL)
	INC HL
	CALL BB2D	;Druck Zeichen
	DJNZ BB62
	RET
;
BB6A:	PUSH AF
	PUSH BC
	LD H,0		;Pixelzeile 0
BB6E:	PUSH HL
	LD HL,BB58
	LD B,10
	CALL BB62	;Init Drucker
	POP HL
	LD L,0		;Spalte 0
BB7A:	LD B,8
	PUSH HL
	LD DE,0B700H
BB80:	PUSH HL
	PUSH DE
	CALL PV1
	DEFB PADR	;Berechnen Padr.
	LD A,(HL)
	POP DE
	LD (DE),A
	INC DE
	POP HL
	INC H		;+1 Pixelzeile
	DJNZ BB80
	LD C,8
BB90:	LD B,8
	LD HL,0B700H
BB95:	RL (HL)
	RLA
	INC HL
	DJNZ BB95	;Wandlung
	CALL BB2D	;Druck Zeichen
	DEC C
	JR NZ,BB90
	POP HL
	INC L		;+1 Spalte
	LD A,28H
	CP L		;letzte Spalte?
	JR NZ,BB7A
	LD A,H
	ADD 8		;+8 Pixelzeilen
	LD H,A
	JR NC,BB6E
	LD A,0CH	;Form Feed
	CALL BB2D	;Druck Zeichen
	POP BC
	POP AF
	POP DE
	POP HL
	RET
;-----------------------
;BBB8H
;
;->frei
;
;BC00H
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ