0100 1000 0100 C ... V-TEXT.C
Monitoraufrufe:
rst20: [OUTCH, INKEY, INSTR, INCH, PRST7, OUTSP, INHEX, OUTHX]
Verwendete IO-Ports bzw. Hardware:
04 [] [5]ZGBank, das Programm schaltet nicht, aber die Ausgabe erfolgt mit Umlauten 56 [R/W] I2C: Videotext-Decoder 57 [W] I2C: Videotext-Decoder
	PN	VIDEOTEXT
;
	ORG	08000H
MFREE:	EQU	06800H
ANZS:	EQU	6
ZANF:	EQU	08A00H
PDR:	EQU	050H
PFL:	EQU	052H
PIIC:	EQU	056H
;
BEGIN:	JMP	ANF
	JMP	PGET
	JMP	DISP
	JMP	STAT
	JMP	CTON
	JMP	CTOFF
	JMP	PSEIT
;
	JMP	INIT
	JMP	RUFE
	JMP	READ
	JMP	SEND
ICADR:	DB	022H
;
ANF:	CALL	INIT
	CALL	CTON
	LD	HL,LOGO
	CALL	SEND
MAIN:	LD	SP,000B0H
	LD	HL,R11
	CALL	SEND
	LD	HL,EVSS
	CALL	SEND
	RST	020H
	DB	2,12,13,13
	DB	13,'     '
	DB	'Z 1013 - '
	DB	'Videotext'
	DB	' 1.1'
	DB	13,'    '
	DB	'*********'
	DB	'*********'
	DB	'******'
	DB	13,13,13
	DB	' S ... '
	DB	'Lesen ein'
	DB	'er Seite'
	DB	13,13
	DB	' U ... '
	DB	'Lesen ein'
	DB	'er Unter'
	DB	'seite'
	DB	13,13
	DB	' L ... '
	DB	'Laden von'
	DB	' 55 Seite'
	DB	'n'
	DB	13,13
	DB	' l ... '
	DB	'Laden von'
	DB	' Seiten '
	DB	'maskiert'
	DB	13,13
	DB	' D ... '
	DB	'Druck aus'
	DB	' Seitensp'
	DB	'eicher'
	DB	13,13
	DB	' T ... '
	DB	'Wandeln '
	DB	'in Textfi'
	DB	'le'
	DB	13,13
	DB	' B ... '
	DB	'Bildschir'
	DB	'manzeige'
	DB	13,13
	DB	' V ... '
	DB	'Druckvari'
	DB	'anten'
	DB	13,13
	DB	08DH
TAST:	RST	020H
	DB	2
	DB	13,13
	DB	' Wahl'
	DB	': >_<',8
	DB	088H
NKPL:	LD	HL,00300H
WKEYP:	RST	020H
	DB	4
	OR	A
	JRNZ	KEYPR-#
	DEC	HL
	LD	A,H
	OR	L
	JRNZ	WKEYP-#
	LD	HL,RZ1
	CALL	SEND
	LD	HL,SPACE
	LD	DE,32
	CALL	RTXT
	LD	HL,SPACE
	LD	DE,0EC00H
	LD	B,32
WK3:	LD	A,M
	CMP	32
	CAC	VTSTZ
	LD	(DE),A
	INC	HL
	INC	DE
	DJNZ	WK3-#
	JR	NKPL-#
KEYPR:	CMP	3
	JRNZ	DM2-#
	RST	020H
	DB	2,08CH
	RST	038H
DM2:	PUSH	AF
	RST	020H
	DB	0
	RST	020H
	DB	2
	DB	'<',13,08DH
	POP	AF
	LD	HL,TAST
	PUSH	HL
	CMP	'S'
	JPZ	SEITE
	CMP	'L'
	JPZ	LMEM
	CMP	'l'
	JPZ	LMEM
	CMP	'D'
	JPZ	DMEM
	CMP	'B'
	JPZ	TVGET
	CMP	'T'
	JPZ	ASCII
	CMP	'U'
	JPZ	USEIT
	CMP	'V'
	JPZ	DVAR
	POP	HL
	JMP	MAIN
;
ASCII:	LD	HL,MFREE
	LD	B,ANZS
ASCL1:	CALL	MKASC
	DJNZ	ASCL1-#
	LD	HL,MFREE
	LD	B,ANZS
ASCL2:	CALL	MKET
	DJNZ	ASCL2-#
	RET
MKASC:	LD	D,24
MKZEA:	LD	E,40
MKSPA:	LD	A,M
	CMP	32
	CAC	VTSTZ
	LD	M,A
	INC	HL
	DEC	E
	JRNZ	MKSPA-#
	DEC	D
	JRNZ	MKZEA-#
	RET
VTSTZ:	LD	A,32
	RET
MKET:	PUSH	BC
	LD	B,24
	LD	DE,40
MKEL:	LD	M,01EH
	ADD	HL,DE
	DJNZ	MKEL-#
	POP	BC
	RET
SEITE:	CALL	ENTS
RUSS:	LD	HL,MFREE
	CALL	PGET
	LD	HL,MFREE
	CALL	DISP
	RST	020H
	DB	2
	DB	'Drucken'
	DB	0A0H
	CALL	ASK
	CAZ	PSEIT
	RET
USEIT:	CALL	ENTS
	CALL	ENTU
	JR	RUSS-#
ENTU:	RST	020H
	DB	2
	DB	'Sub'
	DB	'seite: -'
	DB	088H
	LD	HL,SIDE+6
	LD	B,1
US2:	CALL	ORDN
	JRC	US2-#
	LD	M,A
	INC	HL
	ADD	030H
	RST	020H
	DB	0
	DJNZ	US2-#
	RST	020H
	DB	2,08DH
	CALL	CUS
	RET
ENTS:	CALL	SNORM
	RST	020H
	DB	2
	DB	'Seite:'
	DB	' ---'
	DB	8,8,088H
	LD	HL,SIDE
	LD	B,3
LS2:	CALL	ORDN
	JRC	LS2-#
	LD	M,A
	INC	HL
	ADD	030H
	RST	020H
	DB	0
	DJNZ	LS2-#
	RST	020H
	DB	2
	DB	'   '
	DB	0A0H
	CALL	CSI
	RET
ORDN:	RST	020H
	DB	1
	CMP	'0'
	RC
	SUB	030H
	CMP	10
	CCF
	RET
SNORM:	LD	HL,SIDE
	LD	B,7
CLRP:	LD	M,0
	INC	HL
	DJNZ	CLRP-#
	JR	RHOLD-#
CUS:	LD	HL,SIDE+3
	LD	B,4
CUS2:	LD	A,M
	OR	010H
	LD	M,A
	INC	HL
	DJNZ	CUS2-#
CSI:	LD	HL,SIDE
	LD	B,3
CSI2:	LD	A,M
	OR	010H
	LD	M,A
	INC	HL
	DJNZ	CSI2-#
RHOLD:	LD	A,(SIDE)
	OR	8
	LD	(SIDE),A
	RET	
DMEM:	CALL	VFS
	RST	020H
	DB	2,13,13
	DB	'D für Dr'
	DB	'uck / T '
	DB	'für TV'
	DB	08DH
	LD	HL,(02BH)
	LD	(SPACE+4),HL
	LD	B,68
JZH:	LD	A,8
	RST	020H
	DB	0
	DJNZ	JZH-#
DML:	RST	020H
	DB	1
	CMP	3
	JRZ	GOMM-#
	CMP	13
	JRZ	SMPR-#
	CMP	'D'
	JRZ	SMPR-#
	CMP	'T'
	JRZ	SMTV-#
	CMP	8
	CAZ	CUL
	CMP	9
	CAZ	CUR
	JR	DML-#
GOMM:	LD	HL,(SPACE+4)
	LD	(02BH),HL
	RET
SMPR:	CALL	DSFOU
	JRNC	DML-#
	PUSH	HL
	CALL	PSEIT
	POP	HL
	JR	SMP2-#
SMTV:	CALL	DSFOU
	JRNC	DML-#
SMP2:	CALL	DIHL
	JR	DML-#
DIHL:	CALL	CUR
	RET
DSFOU:	LD	HL,(02BH)
	LD	DE,MFREE
	LD	C,ANZS
	LD	(SPACE+2),HL
SMPL:	LD	(SPACE),DE
	LD	HL,8
	ADD	HL,DE
	EX	DE,HL
	LD	HL,(SPACE+2)
	LD	A,(DE)
	CMP	M
	JRNZ	NSPG-#
	INC	DE
	INC	HL
	LD	A,(DE)
	CMP	M
	JRNZ	NSPG-#
	INC	DE
	INC	HL
	LD	A,(DE)
	CMP	M
	JRNZ	NSPG-#
	LD	HL,(SPACE)
	SCF
	RET
NSPG:	LD	DE,(SPACE)
	LD	HL,960
	ADD	HL,DE
	EX	DE,HL
	DEC	C
	RZ
	JR	SMPL-#
CUL:	PUSH	AF
	RST	020H
	DB	2
	DB	8,8,8,088H
	POP	AF
	RET
CUR:	PUSH	AF
	RST	020H
	DB	2
	DB	9,9,9,089H
	POP	AF
	RET
VFS:	RST	020H
	DB	2,13
	DB	'verfügba'
	DB	're Seite'
	DB	'n:'
	DB	08DH
	LD	HL,MFREE
	LD	B,ANZS
VFSL:	CALL	ZNR
	LD	DE,960
	ADD	HL,DE
	DJNZ	VFSL-#
	RET
ZNR:	PUSH	HL
	PUSH	BC
	LD	DE,8
	ADD	HL,DE
	LD	B,3
ZNRL:	LD	A,M
	RST	020H
	DB	0
	INC	HL
	DJNZ	ZNRL-#
	RST	020H
	DB	14
	POP	BC
	POP	HL
	RET
LMEM:	PUSH	AF
	CALL	SNORM
	POP	AF
	PUSH	AF
	CMP	'l'
	CAZ	MASK
	CALL	RHOLD
	RST	020H
	DB	2
	DB	'Lade '
	DB	'Seite '
	DB	'01 ...'
	DB	8,8,8,8,8
	DB	0B1H
	POP	AF
	LD	B,ANZS
	LD	C,0
	LD	HL,MFREE
LML:	PUSH	AF
	PUSH	BC
	CMP	'L'
	JRZ	CLPG-#
	CALL	PGET
LML2:	POP	BC
	CALL	COUNT
	POP	AF
	DJNZ	LML-#
	RET
CLPG:	CALL	LPGET
	JR	LML2-#
MASK:	RST	020H
	DB	2
	DB	'Maske:'
	DB	0A0H
	RST	020H
	DB	16
	LD	DE,(016H)
	LD	B,7
	LD	HL,SIDE
MAL:	PUSH	HL
	RST	020H
	DB	3
	LD	A,L
	POP	HL
	LD	M,A
	INC	HL
	DJNZ	MAL-#	
	RET
COUNT:	INC	C
	PUSH	BC
	XOR	A
	INC	C
TCAD:	INC	A
	DAA
	DEC	C
	JRNZ	TCAD-#
	PUSH	AF
	RST	020H
	DB	2,8,088H
	POP	AF
	RST	020H
	DB	6
	POP	BC
	RET
LPGET:	PUSH	HL
	LD	HL,R11
	CALL	SEND
	LD	HL,SSUCH
	CALL	SEND
FPW1:	CALL	ARRIV
	JRNZ	FPW1-#
	LD	HL,SREAD
	CALL	SEND
	POP	HL
	LD	DE,40
	CALL	RTXT
	PUSH	HL
	LD	HL,RARR
	CALL	SEND
FPW2:	LD	HL,ARRD
	CALL	SEND
	CALL	RR11
	CMP	'#'
	JRZ	FPW2-#
	CALL	CTOFF
	LD	HL,SRE2
	CALL	SEND
	POP	HL
	LD	DE,920
	CALL	RTXT
	CALL	CTON
	RET
PGET:	PUSH	HL
	LD	HL,R11
	CALL	SEND
	LD	HL,SSUCH
	CALL	SEND
	POP	HL
PW1:	CALL	ARRIV
	JRNZ	PW1-#
	PUSH	HL
	CALL	W100
	CALL	CTOFF
	LD	HL,SREAD
	CALL	SEND
	POP	HL
	LD	DE,960
	CALL	RTXT
	CALL	CTON
	RET
ARRIV:	PUSH	HL
	RST	020H
	DB	4
	CMP	3
	JPZ	MAIN
	LD	HL,DARR
	CALL	SEND
	CALL	RR11
	POP	HL
	BIT	5,A
	RET
TVGET:	NOP
DISP:	PUSH	HL
	LD	HL,TVD
	CALL	SEND
	POP	HL
	RET
STAT:	LD	HL,R11B
	CALL	SEND
RR11:	LD	HL,SPACE
	LD	DE,1
	CALL	RTXT
	LD	HL,SPACE
	LD	A,M
	RET
WSEC1:	LD	B,10
WSL:	CALL	W100
	DJNZ	WSL-#
	RET
W100:	LD	HL,01DFDH
PAU1:	DEC	HL
	LD	A,H
	OR	L
	JRNZ	PAU1-#
	RET
CTON:	PUSH	HL
	LD	HL,CON
	CALL	SEND
	POP	HL
	RET
CTOFF:	PUSH	HL
	LD	HL,COFF
	CALL	SEND
	POP	HL
	RET
;
;	Grundroutinen für
;	IIC-Steuerung
;
RUFE:	LD	D,0
RNXT:	LD	A,D
	CALL	START
	CALL	SBYTE
	CAZ	IDENT
	CALL	STOP
	INC	D
	LD	A,D
	OR	A
	JRNZ	RNXT-#
	RET
RTXT:	PUSH	HL
	LD	HL,R11R
	CALL	SEND
	POP	HL
READ:	CALL	START
	LD	A,(ICADR)
	INC	A
	CALL	SBYTE
	JPNZ	NOIC
	PUSH	BC
	LD	B,D
	LD	C,E
RLP:	LD	D,1
	DEC	BC
	LD	A,B
	OR	A
	JRNZ	RLP2-#
	LD	D,C
RLP2:	CALL	RBYTE
	LD	M,A
	INC	HL
	LD	A,B
	OR	C
	JRNZ	RLP-#
	POP	BC
	CALL	STOP
	RET
SEND:	CALL	START
	LD	A,(ICADR)
	CALL	SBYTE
	JPNZ	NOIC
	PUSH	BC
	LD	B,M
SLP:	INC	HL
	LD	A,M
	CALL	SBYTE
	JPNZ	ERROR
	DJNZ	SLP-#
	POP	BC
	CALL	STOP
	RET
RBYTE:	PUSH	BC
	LD	A,2
	OUT	PIIC
	LD	B,8
RLOOP:	SET	0,A
	OUT	PIIC
	IN	PIIC
	BIT	3,A
	SCF
	JRZ	RHI-#
	CCF
RHI:	RL	C
	RES	0,A
	OUT	PIIC
	DJNZ	RLOOP-#
	XOR	A
	CMP	D
	JRNZ	REND-#
	LD	A,2
REND:	OUT	PIIC
	SET	0,A
	OUT	PIIC
	RES	0,A
	OUT	PIIC
	SET	1,A
	OUT	PIIC
	LD	A,C
	POP	BC
	RET
SBYTE:	PUSH	BC
	LD	B,8
	LD	C,A
	XOR	A
SLOOP:	SET	1,A
	RLC	C
	JRC	SHI-#
	RES	1,A
SHI:	OUT	PIIC
	SET	0,A
	OUT	PIIC
	RES	0,A
	OUT	PIIC
	DJNZ	SLOOP-#
	POP	BC
	SET	1,A
	OUT	PIIC
	SET	0,A
	OUT	PIIC
	IN	PIIC
	CPL
	BIT	3,A
	CPL
	RES	0,A
	OUT	PIIC
	RET
START:	PUSH	AF
	LD	A,1
	OUT	PIIC
	XOR	A
	OUT	PIIC
	POP	AF
	RET
STOP:	PUSH	AF
	XOR	A
	OUT	PIIC
	OR	1
	OUT	PIIC
	OR	3
	OUT	PIIC
	POP	AF
	RET
INIT:	LD	A,0FFH
	OUT	PIIC
	OUT	PIIC+1
	LD	A,0FCH
	OUT	PIIC+1
	CALL	STOP
	RET
PRHL:	PUSH	AF
PR2:	LD	A,M
	OR	A
	JRZ	PRE-#
	CMP	32
	JRNC	PR3-#
	LD	A,32
PR3:	RST	020H
	DB	0
	INC	HL
	JR	PR2-#
PRE:	POP	AF
	RET
ERROR:	RST	020H
	DB	2
	DB	13
	DB	'Fehler.'
	DB	08DH
	CALL	STOP
	RST	038H
NOIC:	LD	A,(ICADR)
	LD	D,A
	CALL	IDM
	RST	020H
	DB	2
	DB	'nicht.'
	DB	08DH
	CALL	STOP
	RST	038H
IDENT:	CALL	IDM
	RST	020H
	DB	2,8
	DB	'.',08DH
	RET
IDM:	CALL	NAME
	RST	020H
	DB	2
	DB	' meldet'
	DB	' sich'
	DB	0A0H
	RET
NAME:	RST	020H
	DB	2
	DB	'IC'
	DB	0A0H
	LD	A,D
	RST	020H
	DB	6
	RET
;
;	Grundroutinen für
;	Druckerausgabe
;
DVAR:	LD	B,0
	RST	020H
	DB	2
	DB	'Vollgraf'
	DB	'ik  '
	DB	0A0H
	CALL	ASK
	JRZ	DRVG-#
	LD	B,1
DRVG:	RST	020H
	DB	2
	DB	'alle Zei'
	DB	'chen'
	DB	0A0H
	CALL	ASK
	LD	A,B
	JRNZ	DRCD-#
	OR	2
DRCD:	LD	(DROPT),A
	RET
ASK:	RST	020H
	DB	2
	DB	' (J)/N :'
	DB	0A0H
	RST	020H
	DB	1
	CMP	'J'
	JRZ	MAY-#
	CMP	'j'
	JRZ	MAY-#
	LD	A,'N'
MAY:	PUSH	AF
	RST	020H
	DB	0
	RST	020H
	DB	2,08DH
	POP	AF
	RET
PSEIT:	PUSH	HL
	LD	HL,PENT
	LD	B,3
	CALL	PGIVE
	POP	HL
	LD	B,24
NXZ:	PUSH	BC
	CALL	PZEIL
	POP	BC
	RST	020H
	DB	4
	CMP	3
	RZ
	DJNZ	NXZ-#
	CALL	LFPR
	JR	LFPR-#
PZEIL:	LD	A,(DROPT)
	BIT	0,A
	JRNZ	PZNZ-#
	PUSH	HL
	LD	HL,CVGA
	LD	B,5
	CALL	PGIVE
	POP	HL
PZNZ:	XOR	A
	LD	(STRG),A
	LD	(HFA),A
	LD	A,7
	LD	(VFA),A
	LD	B,40
PLOP:	LD	A,M
	CALL	VGRA
	INC	HL
	DJNZ	PLOP-#
	LD	A,13
	CALL	POUT
LFPR:	LD	A,10
	CALL	POUT
	RET
VGRA:	PUSH	HL
	PUSH	DE
	PUSH	BC
	LD	HL,STRG
	CMP	8
	CAC	SASC
	CMP	16
	JRC	SLE-#
	CMP	018H
	CAC	SGRA
	CMP	24
	CAZ	CONC
	CMP	28
	CAZ	BBKG
	CMP	29
	CAZ	FBKG
	CMP	30
	CAZ	SHLD
	CMP	31
	CAZ	RHLD
	CMP	32
	JRNC	NUG-#
SLE:	LD	A,32
NUG:	BIT	1,M
	CANZ	TRANS
	LD	(LAST),A
	LD	B,A
	LD	A,(DROPT)
	BIT	1,A
	JRNZ	TOS-#
	BIT	2,M
	JRNZ	NTOS-#
	LD	A,(VFA)
	AND	00FH
	LD	C,A
	LD	A,(HFA)
	AND	00FH
	CMP	C
	JRNZ	TOS-#
NTOS:	LD	B,32
TOS:	LD	A,(DROPT)
	BIT	0,A
	JRNZ	PNZ2-#
	LD	HL,ZANF
	LD	D,0
	LD	E,B
	SLA	E
	RL	D
	SLA	E
	RL	D
	SLA	E
	RL	D
	ADD	HL,DE
	LD	B,8
	CALL	PGIVE
PPOP:	POP	BC
	POP	DE
	POP	HL
	RET
PNZ2:	LD	A,B
	CALL	POUT
	JR	PPOP-#
TRANS:	LD	B,A
	LD	A,(DROPT)
	BIT	0,A
	JRNZ	TSPC-#
	LD	A,B
	CMP	040H
	JRNC	GR40-#
	ADD	080H
	RET
GR40:	CMP	060H
	RC
	CMP	080H
	RNC
	SUB	060H
	RET
TSPC:	LD	A,32
	RET
SHLD:	SET	0,M
	RET
RHLD:	RES 	0,M
	RET
SASC:	RES	1,M
	RES	2,M
	LD	(VFA),A
	RET
SGRA:	SET	1,M
	RES	2,M
	LD	(VFA),A
	BIT	0,M
	RZ
	LD	A,(LAST)
	RET
BBKG:	XOR	A
	LD	(HFA),A
	RET
FBKG:	LD	A,(VFA)
	LD	(HFA),A
	RET
CONC:	SET	2,M
	RET
PGIVE:	LD	A,M
	CALL	POUT
	INC	HL
	DJNZ	PGIVE-#
	RET
POUT:	PUSH	AF
	OUT	PDR
PRL:	IN	PFL
	BIT	0,A
	JRNZ	PRL-#
	POP	AF
	RET
PENT:	DB	27,'3',24
CVGA:	DB	27,'*',5
	DA	320
VFA:	DB	0
HFA:	DB	0
LAST:	DB	0
STRG:	DB	0
DROPT:	DB	0
R11:	DB	2,0,0
R11B:	DB	2,0,3
R11R:	DB	1,11
CON:	DB	2,1,4
COFF:	DB	2,1,36
UHR:	DB	4,8,0,0,32
RZ1:	DB	4,8,0,0,8
SSUCH:	DB	9,2,0
SIDE:	DB	8,0,0
USM:	DB	0,0,0,0
EVSS:	DB	9,2,0
	DB	019H,010H,015H
	DB	010H,011H,0,0
SREAD:	DB	4,8,0
	DB	0,0
SRE2:	DB	4,8,0
	DB	1,0
DARR:	DB	4,8,0
	DB	25,9
RARR:	DB	7,8,0
	DB	0,7
	DB	'###'
ARRD:	DB	4,8,0
	DB	0,8
SZ25:	DB	4,8,0
	DB	25,0
TVD:	DB	2,4,0
LOGO:	DB	11,8,0
	DB	0,0
	DB	3,'*Z-VT*'
;
SPACE:	DB	0
	END
;
	END

Kopf für Endfassung:

	PN	VIDEOTEXT
;
	ORG	00100H
MFREE:	EQU	01000H
ANZS:	EQU	55
ZANF:	EQU	00B00H
PDR:	EQU	050H


Hardware-Anschluß:

Pin 0:	SCL out
Pin 1:	SDA out
Pin 2:	SCL in
Pin 3:	SDA in

erste Meldungen des SAA 5243
(022H) am 16.9.93 !