EP3ASM;
;
;UP."DISRAM"
;
;REALISIERT DIE ANZEIGE EINES
;RAM-BEREICHES IN ANLEHNUNG AN DIE
;DISPLAY-FUNKTION IM "CAOS"
;
;
DISRAM	LD HL,(K17)	;STARTADRESSE
DLE	LD DE,0BH	;ZEILENANZAHL D.
	;		;DARSTELLUNG
DADR	CALL UP
	DEFB 1AH	;AUSG.STARTADR.
	CALL LEER	;AUSG.EINES
			;LEER-ZEICHENS
	PUSH HL	  ;>>	;RETTEN STARTADR
	LD B,8		;INFORMATIONS-
			;ANZAHL JE ZEILE
DHEX	CALL IRMA
	LD A,(HL)	;AUSGABEINFORM.
	PUSH AF
	CALL IRME
	POP AF
	CALL UP		;AUSG. INFORM.
	DEFB 1CH
	CALL LEER	;LEER-ZEICHEN
	INC HL
	DJNZ DHEX	;AUSG.WEITERER
			;7 INFORMATIONEN
	CALL LEER	;LEER-ZEICHEN
	POP HL	  ;<<	;STARTADR. HOLEN
	;
	;AUSGABE DER ASCII-CODE
	;
	LD B,8		;ZAEHLER
DASCII	CALL IRMA
	LD A,(HL)	;AUSGABEINFORM.
	PUSH AF
	CALL IRME
	POP AF
	CP 20H		;LEER-ZEICHEN ?
	JR C DCTRL	;WENN JA
	CP 7FH		;<A> < 7FH ?
	JR C DANZ	;WENN JA
	LD A,2AH	;WENN NEIN
			;<A> := "*"
	JR DANZ
DCTRL	LD A,2EH	;<A> := "."
DANZ	CALL CHROUT	;ZEICHENAUSG.
	INC HL
	DJNZ DASCII	;AUSG. WEITERER
			;7 ZEICHEN
	LD A,0DH	;"enter" ZEILEN-
	CALL CHROUT	;SCHALTUG
	LD A,0AH	;CURSOR "down"
	CALL CHROUT
	DEC E		;LETZTE ZEILE
			;IM FENSTER ?
	JP NZ DADR	;WENN NEIN
	;
D2	PUSH HL		;WENN JA
	CALL UP		;EINGABEABFRAGE
	DEFB 4
	POP HL
	CP 0DH		;TASTE "enter" ?
	JP Z DLE	;WENN JA
	CP 3		;TASTE "break" ?
	JR Z D6		;WENN JA
	CP 13H		;TASTE "stop" ?
	JR Z D7		;WENN JA
	JR D2
	;
	;PROGRAMMFORTSETZUNG "break"
	;
D6	CALL UP
	DEFB 23H
	DEFB 11H
	DEFB 0
	RET
	;
	;PROGRAMMFORTSETZUNG "stop"
	;(KORREKTUR DER BILDSCHIRMAUSG.)
	;
D7	LD A,(K9)	;MENUTYP
	CP 0		;LESEN ?
	JR Z D71	;WENN JA
	CALL UP
	DEFB 23H
	DEFB 11H
	DEFB 0
	LD HL,0A06H	;CURSOR IN EIN-
	LD CA,HL	;GRUNDSTELLUNG
	LD BC,0A06H	;CURSORPOSI-
			;ZAEHLER
	;(LETZTE ZEILE, 6.SPALTE)
	;
D8	CALL UP
	DEFB 4		;INFORM.EINGABE
	CP 3		;TASTE "break"	?
	JP Z D13	;WENN JA
	CP 0DH		;TASTE "enter"	?
	JP Z D14	;WENN JA
	CP 8		;CURSOR "left"	?
	JR Z D9		;WENN JA
	CP 20H		;TASTE "space" ?
	JR Z D10	;WENN JA
	CP 9		;CURSOR"right" ?
	JR Z D10	;WENN JA
	CP 0AH		;CURSOR "down"	?
	JR Z D11	;WENN JA
	CP 0BH		;CURSOR "up" ?
	JR Z D12	;WENN JA
	CP 47H		;<A> =, > 47H ?
	JR NC D8	;WENN JA
	CP 30H		;<A> < 30H ?
	JR C D8		;WENN JA
	CALL UP		;AUSG.GUELT.ZIFF
	DEFB 0
	LD A,C		;<C> AKTUELLE
			;SPALTENINFORM.
	CP 1CH		;LETZTE EING.SP?
	JR Z D15	;WENN JA
	INC C		;ERHOEHEN SP.Z.
	JR D8
	;
	;DISPLAY-FUNKTIONSBEARBEITUNG
	;IM FALLE MENU-PROGRAMM "READ"
	;
D71	LD HL,D1	;ENDE
	EX (SP),HL	;BEI > LDISPL
	RET
	;
	;
D15	LD A,8		;CURSOR "left"
	JR SZA		;STEUERZEICHEN
			;AUSGABE
	;
	;PROGRAMMFORTSETZUNG
	;CURSOR "left"
	;
D9	LD A,C
	CP 6		;SPALTENANFANG ?
	JR Z D8		;WENN JA
	DEC C		;SP.ZAHLER ERN.
	LD A,8		;CURSOR "left"
	JR SZA		;STEUERZ. AUSG.
	;
	;PROGRAMMF.
	;CURSOR "right"
	;
D10	LD A,C
	CP 1CH		;SPALTENENDE ?
	JR Z D8		;WENN JA
	INC C		;SP.ZAEHLER ERH.
	LD A,9		;CURSOR "right"
	JR SZA		;STEUERZ. AUSG.
	;
	;PROGRAMMF.
	;CURSOR "down"
	;
D11	LD A,B
	CP 0AH		;LETZTE ZEILE ?
	JR Z D8		;WENN JA
	INC B		;Z.ZAEHLER ERH.
	LD A,0AH	;CURSOR "down"
	JR SZA		;STEUERZ. AUSG.
	;
	;PROGRAMMF.
	;CURSOR "UP"
	;
D12	LD A,B
	CP 0		;1.ZEILE ?
	JR Z D8		;WENN JA
	DEC B		;Z.ZAEHLER ERN.
	LD A,0BH	;CURSOR "up"
	;
	;STEUERZEICHENAUSGABE
	;
SZA	CALL UP
	DEFB 24H
	JR D8
	;
	;PROGRAMMF.
	;TASTE "break"
	;DATENEINGABEBESTAETIGUNG
	;
D13	LD DE,0		;CURSORPOSITION
	LD CA,DE
	CALL UP
	DEFB 32H
	LD DE,K15
	LD BC,4
	;
	;UEBRTRAEGT DIE AKTUELLE
	;AUSGABEADRESSE (OBERER LINKER
	;BILDRAND) DER DISPLAY-FUNKTION
	;IN DIE ARBEITSZELLEN
	;
	LDIR
	LD IY,K15
	CALL ASHEX
	;
	;WANDLUNG DER ADRESSE
	;ASCII-HEXAD.
	;
	LD (K18),DE	;ABLAGE DER ADR.
	LD BC,57H	;BYTEZAEHLER
	LD DE,6		;CURSORPOSITION
	LD HL,(K18)	;STARTADR.
D18	PUSH HL
	PUSH DE
	PUSH BC
	LD CA,DE	;CURSOR
	;
	;AUF ERSTES HEX-DUMP BYTE SETZEN
	;
	CALL UP
	DEFB 32H
	LD DE,K20	;ZIELADR.
	LD BC,2
	LDIR		;UEBERGABE DATEN
	CALL ASHD	;IN ARBEITS-
			;ZELLEN ASCII-
			;HEXAD.-WANDLUNG
	;
	POP BC		;BYTEZAEHLER
	POP DE		;CURSORPOSITION
	CALL IRMA
	LD HL,K20	;HEXAD.-WERT AUF
	INC HL		;HL+1
	LD A,(HL)	;<A> := "WERT"
	POP HL		;STARTADR. RAM
	LD (HL),A	;UEBERG. "WERT"
	CALL IRME
	INC HL		;RAM+1
	LD A,B
	OR C		;LETZTES BYTE
	JR Z D19	;WENN JA
	DEC BC
	LD A,E
	ADD 3
	CP 1EH		;LETZTE SPALTE ?
	JR Z D17	;WENN JA
	LD E,A		;AKT. KURSOR-
			;SPALTENPOS.
	JR D18
	;
	;
D17	INC D		;AKT. KURSOR-
			;ZEILENPOS.
	LD E,6		;SPALTENPOS.
	JR D18
	;
D19	LD HL,D20	;UP.-ENDE
	EX (SP),HL
	RET
	;
D20	LD HL,0
	LD CA,HL
	CALL UP
	DEFB 23H
	DEFB 12H
	DEFB 0
	LD HL,(K18)	;RAM-STARTADR.
	CALL DLE	;AUSGABE DES
			;KORRIGIERTEN
			;RAM-BEREICHES
	JP DRAM
	;
	;
	;PROGRAMMF.
	;TASTE "enter"
	;
D14	LD A,B
	CP 0AH		;LETZTE ZEILE ?
	JR Z D16	;WENN JA
	INC B		;ZEILENSCHALTUNG
	;
	;KURSOR AUF NEUE POSITION
	;EINSTELLEN
	;
D16	LD C,6
	LD L,C
	LD H,B
	LD CA,HL
	JP D8
;
;
;UP."DISROM"
;
;REALISIERT DIE DISPLAY-FUNKTION
;IN ANLEHNUNG AN DAS "CAOS"
;DIE DATENANZEIGE ERFOLGT AUS DEM EPROM
;OHNE VORHERIGER UMKOPIERUNG DES DATEN-
;INHALTES IN DEN RAM-BEREICH.
;EINE AENDERUNG DER AUSGABEDATEN IST
;NICHT MOEGLICH.
;
DISROM	JP BLESEN	;ERMITTLUNG
	;
	;DES EPROMTYP'S UND DER START-
	;ADRESSE DER STEUERCODETABELLE
	;RUECKKEHR ZUR MARKE "D4"
	;
D4	LD A,0FFH
	OUT P2SA
	OUT P2SA
	LD A,(IY+8)
	OUT P2DB
	LD A,10H	;ZK.EINSCHWING-
			;ZEIT Vcc
	CALL UP
	DEFB 14H
	LD HL,(K16)	;EPROM-STARTADR.
DELO	LD DE,0BH	;DARSTELLUNG
			;VON 11 ZEILEN
DADRO	CALL UP
	DEFB 1AH	;AUSG. STARTADR.
	CALL LEER	;AUSG. EINES
			;LEER-ZEICHENS
	PUSH HL
	LD B,8		;ZEICHENZAEHLER
DHEXO	CALL INROM	;EINLESEN EINES
			;ZEICHENS VOM
			;EPROM
	CALL UP
	DEFB 1CH	;AUSG.DES
			;ZEICHENS
	LD A,(IY+8)
	OUT P2DB
	CALL LEER	;AUSG. EINES
			;LEERZEICHENS
	INC HL
	DJNZ DHEXO	;FORTSETZUNG
			;AUSG.WEITERER
			;7 ZEICHEN
	;
	;
	;AUSGABE DER ZUGEHOERIGEN
	;8 ASCII-ZEICHEN
	;
	CALL LEER	;AUSG. EINES
			;LEERZEICHENS
	POP HL		;STARTADR.
	LD B,8		;ZEICHENZAEHLER
	;
DASCIIO	CALL INROM	;EINLESEN EINES
			;ZEICHEN VOM
			;EPROM
	PUSH AF
	LD A,(IY+8)
	OUT P2DB
	POP AF
	CP 20H		;<A> < 20H ?
			;WENN JA
	JR C DCTRLO	;STEUERZEICHEN
	;
	;
	CP 7FH		;<A> < 7FH ?
			;WENN JA
	JR C DANZO	;ASCII-ZEICHEN
	;
	;		;WENN NEIN
	LD A,2AH	;<A> := "*"
	JR DANZO	;AUSGABE
	;
	;
	;STEUERZEICHENAUSGABE
	;
DCTRLO	LD A,2EH	;<A> := "."
DANZO	CALL CHROUT
	PUSH BC
	;
	LD BC,(K5)
	LD A,C
	OR B		;LETZTES EPROM
			;LESE-BYTE ?
	JP Z D5		;WENN JA
	DEC B
	LD (K5),BC
	;
	POP BC
	INC HL
	DJNZ DASCIIO	;AUSG. WEITERER
			;7 ASCII-CODE
	;
	LD A,0DH	;AUSG. "enter"
	CALL CHROUT
	;
	LD A,0AH	;CURSOR "down"
	CALL CHROUT
	DEC E
			;LETZTE AUSGABE-
			;ZEILE ?
	JR NZ DADRO	;WENN NEIN
	;
D3	PUSH HL
	CALL UP		;TASTATUREIN-
	DEFB 4		;GABEABFRAGE
	POP HL
	CP 0DH		;TASTE "enter"	?
	JR Z DELO	;WENN JA
	CP 3		;TASTE "break" ?
	JR NZ D3	;WENN NEIN
	;
	CALL UP		;UP. ENDE
	DEFB 23H
	DEFB 11H
	DEFB 0
	RET
	;
	;
D5	POP BC		;UP. ENDE
			;FORTSETZUNG
	LD HL,DISPLAY	;> DISPLAY
	EX (SP),HL
	RET
;
;
;UP."INROM"
;
;EINLESEN EINES BYTE'S VOM EPROM
;
;
INROM	LD A,L
	OUT P1DA
	PUSH DE
	LD A,H
	LD D,A
	CALL PGME	;PGM EIN?
	OUT P1DB
	POP DE
	LD A,(IY+7)
	OUT P2DB
	IN A,P2DA
	RET
;
;
;UP."LEER"
;
;AUSGABE EINES LEERZEICHENS (space)
;
;
LEER	LD A,20H
CHROUT	CALL UP
	DEFB 24H
	RET
;
;
;UP."DRAM"
;
;HILFSPROGRAMM UP."DISRAM"
;(DATENEINGABE, KONTROLLE AUF GUELTIG-
;KEIT, AUFRUF FENSTER FUER DATENAUSGABE)
;
DRAM	EXX
	LD D,1		;<D>DISP.RAM EIN
	EXX
	CALL H1
	CALL H8
	LD A,6
	LD CO,A
	LD HL,1000H
	LD FA,HL
	LD HL,0F28H
	LD FG,HL
	LD HL,403H
	LD CA,HL
	CALL UP
	DEFB 23H
	DEFM 'FROM ADR:'
	DEFB 0
DRAM1	CALL FA140D
	CALL FE140D
	CALL DE140D
	CALL GULB
	EXX
	LD DE,101H	;<E>DIS.ANZ. EIN
	EXX
	LD HL,100H
	LD FA,HL
	LD HL,0C28H
	LD FG,HL
	LD HL,0
	LD CA,HL
	CALL UP
	DEFB 23H
	DEFB 0CH
	DEFB 12H
	DEFB 0
	CALL DISRAM
	JR DRAM
;
;
;UP."DROM"
;
;HILFSPROGRAMM FUER UP."DISROM"
;(DATENEINGABE, KONTROLLE AUF GUELTIG-
;KEIT, FENSTERAUFRUF FUER DATENAUSGABE,
;PROGRAMMBEENDIGUNG)
;
DROM	CALL H1
	CALL H6
	CALL H7
	CALL H9
	LD A,6
	LD CO,A
	LD HL,1000H
	LD FA,HL
	LD HL,0F28H
	LD FG,HL
	LD HL,401H
	LD CA,HL
	CALL DA2
	CALL FA1406
	CALL DA00
	CALL DA140DT
	CALL FE1406
	CALL DE1406
	CALL GULA
	CALL TABFR
	LD (K17),HL
	CALL SUBTA
	CALL SUBBA
	EXX
	LD DE,1
	EXX
	LD HL,100H
	LD FA,HL
	LD HL,0C28H
	LD FG,HL
	LD HL,0
	LD CA,HL
	CALL UP
	DEFB 23H
	DEFB 0CH
	DEFB 12H
	DEFB 0
	CALL DISROM
DYN	LD A,6
	LD (K23),A
	CALL H1
	CALL H4
	CALL H5
	CALL H9
	JP D27
;
;
;UP."H9"
;
;HILFSPROGRAMM ZUR EPROM-TYP-AUSGABE
;IM UP."DISPLAY"
;
H9	LD A,(K1)	;n.w.T CURSOR
			;EPROM-TYP
	CP 0A0H		;2716 ?
	JR Z D22
	CP 0C8H		;2732 ?
	JR Z D23
	CP 0F0H		;2764 ?
	JR Z D24
	CP 18H		;27128 ?
	JR Z D25
	CP 40H		;27256 ?
	JR Z D26
	CP 68H		;27256A ?
	JR Z D26
	LD HL,ANF
	EX (SP),HL
	RET
;
D22	CALL UP
	DEFB 23H
	DEFM '   2716'
	DEFB 0
	RET
D23	CALL UP
	DEFB 23H
	DEFM '   2732'
	DEFB 0
	RET
D24	CALL UP
	DEFB 23H
	DEFM '   2764'
	DEFB 0
	RET
D25	CALL UP
	DEFB 23H
	DEFM '   27128'
	DEFB 0
	RET
D26	CALL UP
	DEFB 23H
	DEFM '   27(C)256'
	DEFB 0
	RET
	;
	;UP. "DISPLAY" ENDE
	;
D27	CALL DEYN
D21	CP 59H		;TASTE "Y" ?
	JP Z DEABC2	;WENN JA >MENU
	CP 4EH		;TASTE "N" ?
	JP Z DISPLAY	;WENN JA
	CALL DEYN
	JR D21
;
;
;UP."GUELT"
;
;TESTET DIE GUELTIGKEIT DER DATENEIN-
;GABE IN DEN FENSTERN A,B,C
;
;RECHTSBUENDIGES AUFREIHEN VON ASCII-
;ZEICHEN, DIE DEN CODE 0-0FH ENTSPRE-
;CHEN. LEERZEICHEN DIE ZWISCHEN GUEL-
;TIGEN ASCII-ZEICHEN ANGEORDNET SIND
;WERDEN AUSGEBLENDET. ANSCHLIESSEND WIRD
;DIE URSPRUENGLICHE ANZAHL VON LEERZEI-
;CHEN DURCH "NULLEN" (30H), WELCHE ALS
;VORNULLEN GESCHRIEBEN WERDEN AUFGE-
;FUELLT. EIN ERKANNTES BYTE "00" WIRD IN
;EIN LEERZEICHEN (20H) UMGEWANDELT.
;DER ASCII-CODE "2A" (*) BEWIRKT DEN
;RUECKSPRUNG INS "EPROMMER"-MENU.
;
;
GUELT	LD HL,(K3)	;INFORMATIONS-
			;ZEIGER
	LD DE,(K3)	;UMLADE-ZEIGER
	;
	;EINGABESPEICHER  XX XX XX XX
			;	   ^
			;	   HL
			;	   DE
	DEC HL
	LD (K4),HL
	LD IY,K4
	INC HL
	LD A,L
	ADD 3
	LD L,A
	LD E,A
	LD BC,0
A3	LD A,L
	CP (IY)		;LETZTES
			;ZEICHEN ?
	JR Z A1		;WENN JA
	;
	LD A,(HL)	;AUSWERTUNG
			;ZEICHEN
	CP 2AH		;<A> := "*" ?
	JP Z ORG2	;WENN JA > MENU
	CP 47H		;<A> > "0FH" ?
	JP NC ORG	;WENN JA
			;EINGABEWIEDERH.
	CP 30H		;<A> =,< 30H ?
	JP C A2		;WENN JA
	JR A5
A2	CP 30H		;<A> = 30H ?
	JR Z A5		;WENN JA
	CP 0		;<A> = "00" ?
	JR Z A6		;WENN JA
	CP 20H		;<A> = 20H ?
	JR NZ ORG	;WENN NEIN
	DEC HL
	INC BC
	JR A3
	;
	;UMLADEN JEDES GUELTIGEN ZEICH-
	;ENS
	;
A5	PUSH BC
	LDI
	POP BC
	DEC DE
	DEC DE
	DEC HL
	DEC HL
	JR A3
	;
	;INHALT DURCH LEERZEICHEN ERSET-
	;ZEN
	;
A6	LD (HL),20H
	JR A3
	;
	;AUFFUELLEN DER LEERZEICHEN MIT
	;"NULLEN" (30H)
	;
A1	LD A,C
	OR B
	JR Z A4
	INC HL
	LD (HL),30H
	DEC BC
	JR A1
	;
	;UP. ENDE
	;
A4	RET
;
;
;UP."ORG"
;
;BEENDIGUNG UP."X" UND SPRUNG ZUM ORGA-
;NISATORISCHEN VERTEILER (MA 28)
;
ORG	LD HL,MA28
	EX (SP),HL
	RET
MA28	LD A,(K9)
	CP 0		;LESEN ?
	JP Z ORG3
	CP 1
	JP Z COMPARE
	CP 2
	JP Z CHECKSU
	CP 3
	JP Z CHECK
	CP 4
	JP Z BLANK
	CP 5
	JP Z SCHREIBEN
	CP 6
	JP Z DISPLAY
	CP 7
	JP Z TAPE
	JP MENU
;
;
;UP."ORG1"
;
;BEENDIGUNG UP."X" UND SPRUNG ZUR MARKE
;-MA 29-
;(TEST AUF ABRUCH "TASTE-break-" IM
;FENSTER "Vpp" UND RUECKSPRUNG INS"CAOS"
;
ORG1	LD HL,MA29
	EX (SP),HL
	RET
MA29	LD A,(K11)
	CP 3
	JP Z EXIT
	JP MENU
;
;
;UP."ORG2"
;
;BEENDIGUNG UP."X" UND RUECKSPRUNG ZUM
;PROGRAMM-WARMSTART "EPROMMER"
;
;
ORG2	LD HL,ANF
	EX (SP),HL
	RET
;
;
;UP."ORG3"
;
;PROGRAMM-VERTEILER IM UP."READ" WENN
;IN DIESEM UP. DIE DISPLAY-FUNKTION
;AKTIVIERT WURDE.
;-(WENN JA > RUECKSPRUNG ZUR EINGABE
;'FROM:' ADRESSE; ERNEUTE AUSGABE DER
;DISPLAY-FUNKTION)
;-(WENN NEIN > RUECKSPRUNG ZUR FENSTER-
;EINGABE UP. "READ")
;
ORG3	EXX
	LD A,E
	CP 1		;DIS.-ANZ. EIN ?
	JR Z ORG31
	EXX
	JP LESEN
ORG31	EXX
	JP D1		;'FROM:'
;
;UP."HEXASC"
;
;AUSGABE DES WERTES DES HL-REGISTERS
;ALS HEXADEZIMALWERT
;
;
HEXASC	CALL UP
	DEFB 1AH
	RET
;
;
;UP."TABFR"
;
;ERMITTELT DEN EPROM-TYP
;
TABFR	LD A,(K8)
	CP 0		;2716 ?
	JP Z MA15
	CP 1		;2732 ?
	JP Z MA16
	CP 2		;2764 ?
	JP Z MA17
	CP 3		;27128 ?
	JP Z MA18
	CP 4		;27256 ?
	JP Z MA19
	CP 5		;27256A ?
	JP Z MA19
	RET
	;
	;EPROM-TYP-SPEICHERKAPAZITAET
	;
MA15	LD HL,7FFH
	RET
MA16	LD HL,0FFFH
	RET
MA17	LD HL,1FFFH
	RET
MA18	LD HL,3FFFH
	RET
MA19	LD HL,7FFFH
	RET
;
;
;UP."ASHD"
;
;WANDLUNG ASCII-CODE-FOLGE IN EINEN
;HEXADEZIMALWERT IM UP."DISPLAY"
;
ASHD	LD IY,K20
	CALL ASHEX
	LD (K20),DE
	RET
;
;
;UP."DAHLA"
;
;AUSGABE DES WERTES DES REGISTERS HL
;PLUS DEM WERT DES INHALTES DES FEN-
;STERS A.
;-IST DAS ERGEBNIS DER ADDITION
;>0FFFFH SO ERFOLGT DIE WERTAUSGABE
;"FFFF".
;
;
DAHLA	LD DE,(K16)
	ADD HL,DE
	JP C MA22
	CALL HEXASC
MA23	RET
MA22	LD HL,0FFFFH
	CALL HEXASC
	JR MA23
;
;
;UP."PIOINIT"
;
;INITIALISIERT DIE AUSGABEKANAELE
;(PIO 1 UND 2)
;
PIOINIT	LD A,0FFH	;BIT-EIN/AUSG.
	OUT P1SA
	LD A,0		;PORT AUF AUSG.
	OUT P1SA
	OUT P1DA	;AUSG. bit 0-7
			;WERT 0
	;
	LD A,0FFH	;BIT-EIN/AUSG.
	OUT P1SB
	LD A,0		;PORT AUF AUSG.
	OUT P1SB
	OUT P1DB	;AUSG. bit 0-7
			;WERT 0
	;
	LD A,0FFH	;BIT-EIN/AUSG.
	OUT P2SA
	OUT P2SA	;PORT AUF EING.
	;
	LD A,0FFH	;BIT-EIN/AUSG.
	OUT P2SB
	LD A,0		;AUSG. bit 0-7
	OUT P2SB	;WERT 0
	;
	LD A,2EH	;GRUNDINITIALI-
			;SIERUNG EPROM-
	OUT P2DB	;STEUERUNG
	RET
;
;
;UP."IMPULS"
;
;REALISIERT DIE AUSGABE EINES
;PROGRAMMIERIMPULSES
;
;
IMPULS	CALL IRME
	LD A,(IY+1)
	OUT P2DB
	LD A,0FFH
	OUT P2SA
	LD A,0
	OUT P2SA
	CALL IRMA
	LD A,(HL)
	OUT P2DA
	CALL IRME
	LD A,(IY+2)
	OUT P2DB
	CALL PGMA	;PGM AUS?
	OUT P1DB
	CALL ZEIT
	LD A,(IY+3)
	OUT P2DB
	CALL PGME	;PGM EIN?
	OUT P1DB
	LD A,(IY+4)
	OUT P2DB
	LD A,(IY+5)
	OUT P2DB
	RET
;
;
;UP."VERIFY"
;
;VERGLEICHT IM PROGRAMMIER-MODUS
;DEN INHALT DER ROM-ZELLE MIT DEM
;SOLLWERT DER RAM-ZELLE
;
VERIFY	LD A,0FFH
	OUT P2SA
	OUT P2SA
	LD A,(IY+6)
	OUT P2DB
	CALL IRMA
	IN A,P2DA
	RET
IRME	IN A,88H
	SET 2,A
	OUT 88H
	RET
IRMA	IN A,88H
	RES 2,A
	OUT 88H
	RET
ZEIT	PUSH DE
	LD DE,(K24)
Z1	DEC DE
	LD A,D
	OR E
	JR NZ Z1
	POP DE
	RET
DA7	LD A,(K8)
	CP 3
	JR Z EXPAN
	CP 4
	JR Z EXPAN
	CP 5
	JR Z EXPAN
	RET
EXPAN	CALL UP
	DEFB 23H
	DEFM 'EXPANDER-RAM (Y/N):'
	DEFB 0
MA56	LD HL,1113H
	LD FA,HL
	LD HL,101H
	LD FG,HL
	LD HL,0
	LD CA,HL
	CALL UP
	DEFB 4
	CP 59H
	JR Z MA57
	CP 4EH
	JP Z MA58
	JR MA56
MA57	LD HL,1300H
	LD FA,HL
	LD HL,128H
	LD FG,HL
	LD HL,0
	LD CA,HL
	CALL UP
	DEFB 23H
	DEFM 'SWITCH      43'
	DEFB 0
	LD HL,1307H
	LD FA,HL
	LD HL,102H
	LD FG,HL
	LD HL,0
	LD CA,HL
	CALL DE1406
	CALL GUL114
	CALL ASH114
	LD HL,(K16)
	LD A,2
	LD D,43H
	CALL UP
	DEFB 26H
	LD HL,0
	LD (K16),HL
MA58	RET
CLEAR	LD A,6
	LD CO,A
	LD HL,616H
	LD FA,HL
	LD HL,611H
	LD FG,HL
	LD HL,0
	LD CA,HL
	CALL UP
	DEFB 23H
	DEFB 11H
	DEFB 0CH
	DEFB 0
	CALL CLEAR2
	LD A,(K9)
	CP 5
	JP Z DEABC21	;> MENU
	JP DEABC2	;> MENU
CLEAR1	PUSH AF
	LD A,2
	LD CO,A
	LD HL,1C12H
	LD FA,HL
	LD HL,110H
	LD FG,HL
	LD HL,0
	LD CA,HL
	CALL UP
	DEFB 23H
	DEFB 11H
	DEFB 0CH
	DEFB 0
	POP AF
	CP 44H
	JP Z SDUP
	JP SCHREIBEN
CLEAR2	LD A,2
	LD CO,A
	LD HL,1801H
	LD FA,HL
	LD HL,319H
	LD FG,HL
	LD HL,0
	LD CA,HL
	CALL UP
	DEFB 23H
	DEFB 11H
	DEFB 0CH
	DEFB 0
	RET
LEP	LD A,L
	OUT P1DA
	PUSH DE
	LD A,H
	LD D,A
	CALL PGME	;PGM EIN?
	OUT P1DB
	POP DE
	LD A,(IY+7)
	OUT P2DB
	IN A,P2DA
	RET
PGME	LD A,(K8)
	CP 2		;2764?
	JR Z PGME1
	CP 3		;27128?
	JR Z PGME1
	LD A,D
	RET
PGME1	LD A,D
	SET 6,A
	RET
PGMA	LD A,(K8)
	CP 2
	JR Z PGMA1
	CP 3
	JR Z PGMA1
	LD A,D
	RET
PGMA1	LD A,D
	RES 6,A
	RET
ANF2	CALL PIOINIT
	LD HL,ANF
	EX (SP),HL
	RET
COUNTO	LD A,(IX+2)
	CALL UP
	DEFB 1CH
	LD A,3EH
	CALL UP
	DEFB 24H
	LD HL,0
	LD CA,HL
	RET
SAEND	EX DE,HL
	SCF
	CCF
	SBC HL,DE
	RET
UPINIT	LD HL,(0B7B0H)
	ADD HL,DE
	ADD HL,DE
	LD E,(HL)
	INC HL
	LD D,(HL)
	LD (K29),DE
	RET
ZKTAST 	PUSH AF
	PUSH BC
	LD A,(K35)
	CALL UP
	DEFB 14H
	POP BC
	POP AF
	RET
ÿÿÿÿÿÿ