Source file: /~heha/hs/kcemu/kcswberg.zip/DISK/EBRZ12.ASM

EBRZ12ASM 
;**********************************
;***	EPROM-Brennprogamm	***
;***	V.1.2 haftmann#software	***
;***	frei nach FA		***
;***	14.09.92/08.01.93	***
;**********************************
 
;Programm f}r den Z{hler-Brenner
; nach FA f}r 8-bit-EPROMs
; 2716 .. 27512
; auch mit automatischer EPROM-
; und Programmierspannungs-Wahl
 
; PIO Port A:	Daten (bidirektional)
; PIO Port B:	Steuerung (Ausg{nge)
;Bit 0:	RESET Z{hler, *RESET W{hler
;Bit 1:	*/CLOCK Z{hler, *CLOCK W{hler
;Bit 2:	Programmierimpuls /OE-Pin
;Bit 3:	5P-Anschaltung
;Bit 4:	Upp-Anschaltung
;Bit 5:	/OE-Pin
;Bit 6:	/PGM-Impuls
;Bit 7:	/CE-Pin
;/..negiert, *..flankengetriggert
 
PORT	EQU	0B7D3H	;HOR
TYPE	EQU	0B7D4H	;HOR+1
;Bit 0: Prgrammieralgrithmus A/B
MBYTE	EQU	0B7D5H	;VERT
;Bit 1,0: Programmierspannung 12/21/25V
;Bit 2: Steckaufforderung
OS	EQU	0F003H
RC	EQU	0F00FH
 
	DEFW	07F7FH
	DEFM	'EPROM'
	DEFB	1
	;%EPROM <type> <slot/address>
	;
	LD	H,E	;Adresse
	LD	A,(0B781H)
	PUSH	AF
	CP	1
	LD	B,7
	JR	C,NO2ARG
	LD	A,L
	LD	(TYPE),A
	JR	Z,NO2ARG
	LD	B,E	;Anfangsslot
	DEC	B
NO2ARG
	LD	C,80H
MOSU	INC	B
	LD	E,H
	JR	Z,KMODU
	IN	A,(C)
	CP	0EFH	;DIO?
	LD	E,4
	JR	Z,GEF
	CP	0DAH	;PIO3?
	LD	E,10H
	JR	Z,GEF
	AND	0F1H	;#USER/0?
	CP	0C0H	;1100xxx0
	LD	E,A
	JR	Z,GEF
	IN	A,(C)
	AND	0F2H	;#USER/1?
	CP	0C0H	;1100xx0x
	LD	E,0C4H
	JR	NZ,MOSU
GEF
	LD	H,0B8H
	LD	L,B
	LD	A,1
	DI
	LD	M,A	;gefundenes M.
	OUT	(C),A	;einschalten
	EI
KMODU
	LD	A,E	;Portadresse
	LD	(PORT),A
	LD	C,A
	XOR	A	;Daten zu 0
	OUT	(C),A
	INC	C
	INC	A
	OUT	(C),A	;Steuerung 1
	INC	C
	LD	A,4FH
	DI
	OUT	(C),A	;erst mal Input
	INC	C
	OUT	(C),A
	LD	A,0FFH
	OUT	(C),A
	INC	A
	OUT	(C),A	;Bit-Out
	DEC	C
	DEC	A
	OUT	(C),A
	OUT	(C),A	;Bit-In
	DEC	C
	XOR	A
	OUT	(C),A	;Steuerung 0
	EI
	LD	H,A
	CALL	RC
	DEFW	SLINE-$-2
	CALL	OS
	DEFM	'#  (haftmann#software)'
	DEFW	0D0AH
	DEFB	0AH
	NOP
	POP	AF
	ADD	0FFH
	RL	H	;H=ArgN
	;
	LD	(IX+9),0D7H
	LD	A,'>'	;Prompter
	LD	(0B7D9H),A
	JR	EPR21
 
	DEFW	0D7D7H
	DEFM	'EPROM'
	DEFB	1
	LD	A,(0B781H)
	OR	A
	LD	H,A
	JR	Z,EPR2
	LD	A,L
	RES	0,A	;Alg.A
	LD	(TYPE),A
	LD	D,C
EPR21	JR	EPR2
 
	DEFW	0D7D7H
	DEFM	'INFO'
	DEFB	1
	CALL	OS
	DEFM	'#Steckaufforderung: '
	NOP
	LD	A,(0B781H)
	OR	A
	LD	A,(MBYTE)
	JR	Z,INF2
	RES	2,A
	RR	L
	JR	NC,INF20
	SET	2,A
INF20	LD	(MBYTE),A
INF2	BIT	2,A
	JR	NZ,STEIN
	CALL	OS
	DEFM	'#aus'
	NOP
	JR	INF1
STEIN	CALL	OS
	DEFM	'#ein'
	NOP
INF1	CALL	OS
	DEFB	23H
	DEFW	0D0AH
	DEFM	'PIO - Portadresse: '
	NOP
	LD	A,(PORT)
	CALL	OS
	DEFB	1CH
	CALL	OS
	DEFB	2CH
	LD	H,0
EPR2
	CALL	OS
	DEFM	'#EPROM-Typ: '
	NOP
	LD	A,(TYPE)
	RES	0,A
	PUSH	AF
	CP	10H
	JR	C,BT1
	CALL	OS
	DEFB	1CH
	JR	BT2
BT1	ADD	30H
	CALL	OS
	DEFB	24H
BT2	CALL	OS
	DEFM	'# KByte  ('
	NOP
	POP	AF
	CP	2
	LD	L,0
	LD	BC,616H
	JR	Z,TSUKI
	CP	4
	LD	BC,0D32H
	JR	Z,TSUKI
	CP	8
	LD	BC,1C64H
	JR	Z,TSUKI
	CP	16H
	LD	L,'1'
	LD	BC,3C28H
	JR	Z,TSUKI
	CP	32H
	LD	L,'2'
	LD	BC,7C56H
	JR	Z,TSUKI
	CP	64H
	LD	L,'5'
	LD	BC,0FC12H
	JR	Z,TSUKI
	LD	B,0
	CALL	OS
	DEFM	'#?????'
	NOP
	JR	NOTS
TSUKI
	LD	A,27H
	CALL	OS
	DEFB	1CH
	LD	A,L
	OR	A
	JR	Z,NOHI
	CALL	OS
	DEFB	24H
NOHI	LD	A,C
	CALL	OS
	DEFB	1CH
NOTS	CALL	OS
	DEFM	'#)'
	DEFW	0D0AH
	NOP
	LD	A,B
	OR	A
	JR	NZ,OKMELD
	CALL	OS
	DEFM	'#Ung}ltiger '
	DEFM	'EPROM-Typ!'
	DEFB	7
	DEFW	0D0AH
	NOP
OKMELD	LD	A,(MBYTE)
	BIT	2,A	;Wechselauff.
	LD	C,A
	JR	NZ,OKM1
	RES	2,B	;bleibt
OKM1	;B:neues MBYTE, C:altes
	;D,E:Argumente
	;H:Anz. Arg.
	LD	A,H
	CP	3
	JR	NC,OKM11
	LD	D,0
OKM11	CP	1
	LD	A,B
	JR	Z,SWB
	JR	C,SWV
	;>1 Arg
	LD	A,0BH
	CP	D
	JR	Z,SALG
	CP	E
	JR	NZ,NALG
SALG	LD	A,(TYPE)
	SET	0,A
	LD	(TYPE),A
	LD	A,H
	CP	2
	JR	Z,SWV0
NALG	;Kein Algorithmus B
	LD	A,12H
	LD	C,0
	CP	D
	JR	Z,SWV0
	CP	E
	JR	Z,SWV0
	LD	A,21H
	INC	C
	CP	D
	JR	Z,SWV0
	CP	E
	JR	Z,SWV0
	LD	A,25H
	INC	C
	CP	D
	JR	Z,SWV0
	CP	E
SWV0	;A:=BBBBBBCC
	LD	A,B
	JR	NZ,SWB
SWV	;0 Arg
	AND	0FCH
	LD	B,A
	LD	A,C
	AND	3
	OR	B
SWB	;1 Arg
	LD	(MBYTE),A
	LD	B,A
	CALL	OS
	DEFM	'#Programmier'
	DEFM	'spannung: '
	NOP
	LD	A,B
	AND	3
	JR	Z,VPP12
	DEC	A
	LD	A,21H
	JR	Z,VPP21
	LD	A,25H
VPP21	CALL	OS
	DEFB	1CH
	JR	VPPV
VPP12	CALL	OS
	DEFM	'#12.5 '
	NOP
VPPV	CALL	OS
	DEFM	'#V'
	DEFW	0D0AH
	DEFM	'Methode '
	NOP
	LD	A,(TYPE)
	RRA
	JR	C,METHB
	CALL	OS
	DEFM	'#A: Einzelbyte-'
	NOP
	JR	METHA
METHB	CALL	OS
	DEFM	'#B: blockweise '
	NOP
METHA	CALL	OS
	DEFM	'#Programmierung'
	DEFW	0D0AH
	NOP
	RET
 
	DEFW	0D7D7H
	DEFM	'QUIT'
	DEFB	1
	LD	(IX+9),7FH
	LD	A,'%'	;f}r CAOS3.4
	LD	(0B7D9H),A
	RET
 
SLINE	CALL	OS
	DEFM	'## EPROM-BRAND 1.2 '
	DEFM	'plus #'
	DEFW	0D0AH
	NOP
	RET
 
	DEFW	0D7D7H
	DEFM	'MENU'
	DEFB	1
	CALL	OS
	DEFB	23H
	DEFB	0CH
	NOP
	CALL	RC
	DEFW	SLINE-$-2
	POP	HL	;Korrektur
	LD	HL,0C000H
	LD	B,L
	LD	C,L
	CALL	OS
	DEFB	46H	;MENU
 
	DEFW	0D7D7H
	DEFM	'SWITCH'
	DEFB	1
	LD	A,(0B781H)
	OR	A
	JR	Z,MODUL
	LD	D,E
	CALL	OS
	DEFB	26H
	LD	C,D
MODU2	;Ausgabe L,H,C
	LD	A,L
	CALL	OS
	DEFB	1CH
	CALL	OS
	DEFB	2BH
	LD	A,H
	CALL	OS
	DEFB	1CH
	CALL	OS
	DEFB	2BH
	LD	A,C
	CALL	OS
	DEFB	1CH
	CALL	OS
	DEFB	2CH
	RET
MODUL
	LD	L,8
MODU1	LD	A,1
	CALL	OS
	DEFB	26H
	INC	H
	JR	Z,MODU3
	DEC	H
	LD	C,D
	CALL	RC
	DEFW	MODU2-$-2
MODU3	INC	L
	JR	NZ,MODU1
	RET
 
	DEFW	0D7D7H
	DEFM	'LOAD'
	DEFB	1
	CALL	OS
	DEFB	10H
	RET
 
	DEFW	0D7D7H
	DEFM	'VERIFY'
	DEFB	1
	CALL	OS
	DEFB	11H
	RET
 
	DEFW	0D7D7H
	DEFM	'DISPLAY'
	DEFB	1
	LD	A,(0B781H)
	CALL	OS
	DEFB	3BH
	RET
 
	DEFW	0D7D7H
	DEFM	'ARITH'
	DEFB	1
	;
	LD	A,(0B781H)
	CP	2
	RET	C
	PUSH	HL
	ADD	HL,DE
	CALL	OS
	DEFM	'#+ '
	NOP
	CALL	OS
	DEFB	1AH
	POP	HL
	OR	A
	SBC	HL,DE
	CALL	OS
	DEFM	'#- '
	NOP
	CALL	OS
	DEFB	1AH
	CALL	OS
	DEFB	2CH
	RET
 
	DEFW	0D7D7H
	DEFM	'MOVE'
	DEFB	1
	LD	A,(0B781H)
	CP	3
	RET	C
	PUSH	HL
	SBC	HL,DE
	POP	HL
	JR	NC,MOV1
	ADD	HL,BC
	DEC	HL
	EX	DE,HL
	ADD	HL,BC
	DEC	HL
	EX	DE,HL
	LDDR
	RET
MOV1	LDIR
	RET
 
	DEFW	0D7D7H
	DEFM	'FILL'
	DEFB	1
	LD	A,(0B781H)
	CP	2
	JR	C,FIL1
	EX	DE,HL
	SBC	HL,DE
	LD	B,H
	LD	C,L
	;BC=L{nge,DE=Adr!
	LD	HL,0B786H
	SUB	2
	JR	FIL2
FIL1	LD	DE,4000H
	LD	B,D
	LD	C,E
	LD	HL,0B782H
FIL2	OR	A
	JR	NZ,FIL3
	INC	A
	LD	M,0FFH
FIL3	PUSH	AF
	PUSH	HL
FIL5	LDI
	INC	HL
	PUSH	AF
	LD	A,B
	OR	C
	JR	Z,FIL4
	POP	AF
	DEC	A
	JR	NZ,FIL5
	POP	HL
	POP	AF
	JR	FIL3
FIL4	POP	AF
	POP	HL
	POP	AF
	RET
 
	DEFW	0D7D7H
	DEFM	'HELP'
	DEFB	1
	CALL	OS
	DEFB	23H
	DEFW	0A0CH
	DEFM	'** Hilfe zu den '
	DEFM	'Argumenten **'
	DEFW	0D0AH
	DEFB	0AH
	DEFM	'>EPROM Typ (in KByte) '
	DEFM	'(Methode (B))'
	DEFW	0D0AH
	DEFM	' (Programmiersp. '
	DEFM	'(12/21/25))'
	DEFW	0D0AH
	DEFM	'(im CAOS: Typ Modul'
	DEFM	'schacht/Portadresse)'
	DEFW	0D0AH
	DEFB	0AH
	DEFM	'>INFO Steckaufforderun'
	DEFM	'g (0/1)'
	DEFW	0D0AH
	DEFB	0AH
	DEFM	'>ARITH Zahl1 Zahl2'
	DEFW	0D0AH
	DEFB	0AH
	DEFM	'>MOVE Quelle Ziel '
	DEFM	'L{nge'
	DEFW	0D0AH
	DEFB	0AH
	DEFM	'>FILL Bereich Byte '
	DEFM	'Byte ..'
	DEFW	0D0AH
	DEFB	0AH
	DEFM	'>MVIEW, EVIEW:'
	DEFW	0D0AH
	DEFM	' Anfangsadresse/'
	DEFM	'1.Hexziffer'
	DEFW	0D0AH
	DEFB	0AH
	DEFM	'>PROG, READ, COMP, '
	DEFM	'ERAT:'
	DEFW	0D0AH
	DEFM	' Eprom-Bereich Speich'
	DEFM	'erreferenz'
	DEFW	0D0AH
	DEFB	0AH
	DEFM	'>MCRC, ECRC: Bereich'
	DEFW	0D0AH
	DEFB	0AH
	DEFM	'(Bereich = 2 '
	DEFM	'Zahlen: Anfang '
	DEFM	'und Ende+1)'
	DEFW	0D0AH
	DEFM	'Parameter k|nnen '
	DEFM	'weggelassen werden.'
	DEFW	0D0AH
	DEFM	'Standardwert Speicher'
	DEFM	'referenz: 4000H!'
	DEFW	0D0AH
	NOP
	RET
 
	DEFW	0D7D7H
	DEFM	'MVIEW'
	DEFB	1
	LD	BC,2000H
FVKERN
	LD	A,(0B781H)
	OR	A
	JR	NZ,FVK2
	LD	HL,4000H;Vorzug MEM
	LD	A,C
	OR	A
	JR	Z,FVK2
	LD	H,L	;Vorzug EPROM
FVK2	LD	A,H
	OR	A
	JR	NZ,FVK1
	LD	A,L
	ADD	A
	ADD	A
	ADD	A
	ADD	A
	LD	H,A
	LD	L,0
FVK1	;HL=Adr, C=Flag
	LD	A,C
	OR	A
	JR	Z,FVK3
	CALL	RC
	DEFW	RDINI-$-2
	RET	C
FVK3
	PUSH	HL
	LD	D,0
	LD	H,D
	LD	L,D
	CALL	OS
	DEFB	34H
	LD	A,D
	CP	0A8H
	POP	HL
	JR	C,KC4
	;KC3
	LD	DE,8
SCH3	LD	A,C
	OR	A
	LD	A,M
	JR	Z,QMEMO3
	PUSH	DE
	CALL	RC
	DEFW	RDBYT0-$-2
	POP	DE
	RET	C
QMEMO3	PUSH	DE
	PUSH	HL
	EX	DE,HL
	CALL	OS
	DEFB	34H
	LD	M,A
	POP	HL
	POP	DE
	INC	HL
	INC	D	;Zeile
	JR	NZ,SCH3
	INC	E
	DJNZ	SCH3	;Spalte
	JR	KC4E
KC4
	LD	DE,8800H
SCH4	LD	A,C
	OR	A
	LD	A,M
	JR	Z,QMEMO4
	PUSH	DE
	CALL	RC
	DEFW	RDBYT0-$-2
	POP	DE
	RET	C
QMEMO4	LD	(DE),A
	INC	HL
	INC	E
	JR	NZ,SCH4
	INC	D
	DJNZ	SCH4
KC4E
	LD	A,0BH
	LD	B,9
VLO1
	CALL	OS
	DEFB	24H
	LD	A,9
	DJNZ	VLO1
	LD	BC,10EFH
VLO2	LD	A,C
	ADD	22H
	JR	NC,VLO3
	LD	A,1
VLO3
	LD	C,A
	CALL	OS
	DEFB	1CH
	DJNZ	VLO2
	OR	A	;CY=0
	RET
 
;** ENDE DER SPEICHERROUTINEN **
;*******************************
;** BEGINN DER EPROM-ROUTINEN **
 
	DEFW	0D7D7H
	DEFB	0
FARG	;Fetch Arguments
	;PE:A=0 (P/R/C), A=FF (E)
	;PA:HL=EPROM,DE=MEM,BC=LNG
	 EX	AF
	CALL	OS
	DEFB	15H	;LARG
	CP	2
	JR	NC,FAR1
	LD	B,3FH
	OR	A
	JR	NZ,FAR2
	LD	HL,4000H
	LD	B,0FFH
FAR2	EX	DE,HL
	LD	HL,0
	LD	C,L	;=0
	 EX	AF
	 OR	3FH	;3F / FF
	 AND	B	;3F/3F/3F/FF
	 LD	B,A
	 LD	A,(MBYTE)
	 AND	B
	 OR	7
	 INC	A
	 LD	B,A
	 EX	AF
	OR	A
	RET	;PA: A=ArgN
FAR1	;NC!
	PUSH	BC
	EX	DE,HL
	SBC	HL,DE
	EX	(SP),HL
	POP	BC
	EX	DE,HL
	CP	3
	RET	NC
	LD	E,L
	LD	A,H
	AND	3FH
	ADD	40H
	LD	D,A
	LD	A,2
	RET
 
	DEFW	0D7D7H
	DEFM	'EVIEW'
	DEFB	1
	LD	C,1
	LD	A,(MBYTE)
	AND	1FH
	OR	7
	INC	A
	LD	B,A
	CALL	RC
	DEFW	FVKERN-$-2
	RET	C
RDCLO	;Close f}r Read
	PUSH	BC
	LD	A,(PORT)
	LD	C,A
	INC	C
	LD	A,1	;Reset
	OUT	(C),A	;5P weg
	DEC	A
	OUT	(C),A
	POP	BC
	RET
 
;===PROG===
 
LNGMSG	;Hinweis
	CALL	OS
	DEFM	'#Adressen f}r EPROM '
	DEFM	'unpassend!'
	DEFW	0D0AH
	NOP
	RET
 
	DEFW	0D7D7H
	DEFM	'PROG'
	DEFB	1
	XOR	A
	CALL	RC
	DEFW	FARG-$-2
	;L{ngentest
	DEC	BC
	PUSH	HL
	ADD	HL,BC
	JR	C,TOLNG
	LD	A,(MBYTE)
	OR	7
	CP	H
TOLNG	POP	HL
	JR	C,LNGMSG
	INC	BC
	PUSH	DE
	POP	IY
PGM	;HL Adr, IY Quelle, BC L{nge
	CALL	RC
	DEFW	RDINI-$-2
	RET	C
	CALL	RC
	DEFW	VGLVP0-$-2
	JR	C,KOMMT0
	LD	A,(TYPE)
	RRA
	JR	NC,SIBY0;Einzelbyte
;*******
	LD	A,1
BLOC1	 LD	E,A
	 EX	AF	;A=0 Letzter
	LD	A,E
	CALL	OS
	DEFB	1CH	;Zyklus
	CALL	OS
	DEFB	2BH	;SPC
;Brennen en bloc
	PUSH	BC
	PUSH	HL
	PUSH	IY
	CALL	RC
	DEFW	PROGON-$-2
BLOC2	CALL	RC
	DEFW	DIADR-$-2
	JR	C,BLOC4
	PUSH	BC
	LD	A,(PORT)
	LD	C,A
	INC	C
	LD	A,(IY)
	INC	A
	JR	Z,BLOC9
	DEC	A
	LD	D,40H	;Kurze Zeit
	 EX	AF
	 OR	A
	 JR	NZ,BLOC3
	 LD	D,80H	;Lange Zeit
BLOC3	 EX	AF
	;mit Datenbyte in A
	CALL	RC
	DEFW	BRBYTE-$-2
BLOC9	IN	E,(C)
	LD	D,E
	SET	1,D
	OUT	(C),D
	OUT	(C),E
	POP	BC
	INC	HL
	INC	IY
	DEC	BC
	LD	A,B
	OR	C
	JR	NZ,BLOC2
BLOC4	PUSH	AF
	CALL	RC
	DEFW	PROGOF-$-2
	POP	AF
	POP	IY
	POP	HL
	POP	BC
	JR	C,KOMM12
;Lesen en bloc
	CALL	RC
	DEFW	VGLVP-$-2
	JR	C,KOMM1
	JR	Z,BLOC5
	 EX	AF
	 OR	A
	 JR	Z,KOMMS10;Schlu~prfg
	 INC	A
	 LD	E,A
	 LD	A,(TYPE)
	 CP	16H
	 LD	A,5
	 JR	NC,BLOC6
	 LD	A,45
BLOC6	 CP	E
	 JR	C,KOMM2	;Viele Zyklen
	 LD	A,E
	 JR	BLOC1
KOMMT0	JR	KOMMENT
SIBY0	JR	SIBY00
BLOC5
	 EX	AF
	 OR	A
	 JR	Z,BLOC70;Ready
	 XOR	A
	 JR	BLOC1
;*******
KOMMS10	JR	KOMMS1
 
KOMMENT	;Kommentar zu Brennprogramm
	JR	Z,KOMM12;Abbruch
KOMM1	LD	A,1	;Adr.anzeigen
	CALL	RC
	DEFW	PFAULT-$-2
	CALL	OS
	DEFM	'#0-Bits k|nnen '
	DEFM	'nicht zu 1 '
	DEFM	'werden'
	NOP
KOMM11	CALL	OS
	DEFB	2CH	;NL
KOMM12	CALL	RC
	DEFW	RDCLO-$-2
	RET
 
KOMMP	;unter VPP
	;CY=1 BRK
	;CY=0 Z=1 Zu viele Zyklen
	;CY=0 Z=0 Fatal
	POP	BC
	PUSH	AF
	CALL	RC
	DEFW	PROGOF-$-2
	POP	AF
	POP	IY
	POP	BC
	POP	BC
	JR	C,KOMM12
	JR	NZ,KOMM1
	DEFB	3EH	;LD A,/Adr.anz.
KOMM2	;Viele Zyklen, Adr. nicht anz.
	XOR	A
	CALL	RC
	DEFW	PFAULT-$-2
	CALL	OS
	DEFM	'#Zu viele erforder'
	DEFM	'liche Zyklen'
	NOP
KOMM110	JR	KOMM11
 
SIBY00	JR	SIBY
BLOC70	JR	BLOC7
KOMMS	;Schlu~pr}fung
	JR	Z,KOMM12
KOMMS1	SBC	A
	CALL	RC
	DEFW	PFAULT-$-2
	CALL	OS
	DEFM	'#Schlu~pr}fung '
	DEFM	'fehlerhaft'
	NOP
	JR	KOMM110
 
KOMMP0	JR	KOMMP
KOMME	JR	C,KOMMS
	JR	NZ,KOMMS1
BLOC7	CALL	OS
	DEFM	'#Erfolgreich gebrannt!'
	NOP
	JR	KOMM110
;*******
SIBY	;Einzelbyte
	PUSH	BC
	PUSH	HL
	PUSH	IY
	CALL	RC
	DEFW	PROGON-$-2
	;Adresse u. Upp liegen an
PLOOP	CALL	RC
	DEFW	DIADR-$-2
	PUSH	BC
	JR	C,KOMMP0
	LD	A,(PORT)
	LD	C,A
	INC	C
	LD	A,(IY)
	INC	A
	JR	Z,PNOBURN
	LD	B,45	;Zyklen max.
	LD	A,(TYPE)
	CP	16H
	JR	C,PLOOPB
	LD	B,5	;weniger
PLOOPB
	IN	E,(C)
	RES	5,E
	LD	D,E	;erst /OE=L
	OUT	(C),D
	RES	7,D	;dann /CE=L
	OUT	(C),D
	DEC	C
	IN	A,(C)
	INC	C
	OUT	(C),E	;dann /CE=alt
	SET	5,E
	OUT	(C),E	;ende /OE=H
	LD	E,A
	CPL
	AND	(IY)
	JR	NZ,KOMMP0
;Schwerer Fehler - sofort Abbruch
	LD	D,40H
	LD	A,(IY)
	CP	E	;endlich = ?
	JR	Z,PBLAST
	OR	A	;CY=0
	DEC	B	;B ist 1?
	JR	Z,KOMMP0;mit Adr.
	INC	B
	JR	PBNEXT	;letzter Zyklus
KOMME0	JR	KOMME
PBLAST
	LD	B,1
	LD	D,80H
PBNEXT
	CALL	RC
	DEFW	BRBYTE-$-2
	DJNZ	PLOOPB
PNOBURN	IN	E,(C)
	LD	D,E
	SET	1,D
	OUT	(C),D	;z{hlen
	OUT	(C),E
	POP	BC
	INC	IY
	INC	HL
	DEC	BC
	LD	A,B
	OR	C
	JR	NZ,PLOOP
	CALL	RC
	DEFW	PROGOF-$-2
	POP	IY
	POP	HL
	POP	BC
	CALL	RC
	DEFW	VGLVP-$-2
	JR	KOMME0
 
;UP's zum Brennprogramm
PFAULT
	LD	E,A
	CALL	OS
	DEFM	'#EPROM-Fehler '
	NOP
	LD	A,E
	OR	A
	JR	Z,PFAUL1
	CALL	OS
	DEFM	'#auf Adresse '
	NOP
	CALL	OS
	DEFB	1AH
PFAUL1	CALL	OS
	DEFM	'#!'
	DEFB	7
	DEFW	0D0AH
	NOP
	RET
 
BRBYTE	;Brenne Byte
	;PE:C=Port D=Dauer
	PUSH	HL
	INC	C
	LD	E,0FFH
	OUT	(C),E
	INC	E	;E=0
	OUT	(C),E	;Ausgabeport
	DEC	C
	DEC	C
	OUT	(C),A	;Byte anlegen
	INC	C
	IN	E,(C)
	LD	A,E
	XOR	80H	;/CE kompeln
	LD	H,A
	LD	A,(TYPE)
	RES	0,A
	CP	32H
	JR	NC,NOPGM
	RES	6,H	;/PGM-Pin
NOPGM	CP	4	;4k
	JR	Z,YEA4
	CP	64H	;64k
	JR	NZ,NO464
YEA4	SET	2,H	;/OE auf Upp
NO464	OUT	(C),H	;begin(Brand)
	CP	16H
	JR	NC,PWAIT
	SLA	D	;verdoppeln
PWAIT	DEC	D
	JR	NZ,PWAIT
	OUT	(C),E	;end(Brand)
	DEC	D	;D=FF
	INC	C
	OUT	(C),D
	OUT	(C),D	;Eingabe
	DEC	C
	POP	HL
	RET
 
DIADR	;Display Adresse & BRKT
	LD	A,L
	AND	1FH
	RET	NZ
	CALL	OS
	DEFB	1AH
	CALL	OS
	DEFB	23H
	DEFW	808H
	DEFW	808H
	DEFW	8
	CALL	OS
	DEFB	2AH
	RET
 
PROGOF	;VPP wegnehmen, Lesebetrieb
	;mit CLLN
	PUSH	BC
	LD	A,(PORT)
	LD	C,A
	INC	C
	IN	E,(C)
	RES	4,E	;VPP weg
	OUT	(C),E
	LD	A,34
	CALL	OS
	DEFB	14H	;WAIT
	RES	5,E	;/OE aktiv
	RES	7,E	;/CE aktiv
	OUT	(C),E
	POP	BC
	LD	A,2
	CALL	OS
	DEFB	24H
	RET
 
PROGON	;Programmierspannung anlegen
	CALL	RC
	DEFW	INICNT-$-2
	PUSH	BC
	LD	C,A
	SET	5,E	;/OE inaktiv
	LD	A,(TYPE)
	RES	0,A
	CP	2
	JR	Z,PRGO2
	SET	7,E	;bei 2K /CE=L
PRGO2	OUT	(C),E
	SET	4,E	;VPP
	OUT	(C),E
	LD	A,34
	CALL	OS
	DEFB	14H	;WAIT
	POP	BC
	RET
 
VGLVP	;Vergleichsroutine f}r Brenner
	;PE: HL,IY,BC
	;PA: CY=1 Z=0 Fataler Fehler
	;    CY=1 Z=1 Abbruch
	;    CY=0 Z=0 Ungleiche Bytes
	;    CY=0 Z=1 Fertig
	;HL: Adresse bei CY=1
	;VR: DE,HL(nur bei CY=1)
	CALL	RC
	DEFW	INICNT-$-2
VGLVP0	;dito ohne INICNT
	PUSH	BC
	PUSH	HL
	PUSH	IY
	LD	D,0
VGLV1	PUSH	DE
	CALL	RC
	DEFW	RDBYT0-$-2
	POP	DE
	JR	C,VGLV2	;Abbruch
	LD	E,A
	CPL
	AND	(IY)
	SCF
	JR	NZ,VGLV2;Fataler F.
	LD	A,E
	SUB	(IY)
	OR	D
	LD	D,A
	INC	HL
	INC	IY
	DEC	BC
	LD	A,B
	OR	C
	JR	NZ,VGLV1
	OR	D	;Z-Flag
	POP	IY
	POP	HL
	POP	BC
	RET
VGLV2	;Fehler...
	POP	IY
	POP	BC	;HL lassen
	POP	BC
	RET
 
;===RDINI=INICNT=RDBYT===
 
RDINI	;Init Read mit Abfrage
	;PE:HL-Adresse
	;VR:AF,DE
	;PA:CY=1&Z=1 Abbruch
	LD	A,(MBYTE)
	BIT	2,A
	JR	Z,INICNT
RDINI0	;mit Erzwingung Abfrage
	CALL	OS
	DEFM	'#EPROM stecken...'
	NOP
	CALL	OS
	DEFB	16H
	PUSH	AF
	LD	A,2
	CALL	OS
	DEFB	24H
	POP	AF
	CP	3
	SCF
	RET	Z
;** W{hler und Z{hler initialisieren **
;** und (falls fehlend) 5P zuschalten**
INICNT	;PE:HL-Adr
	;VR:AF,DE
	PUSH	BC
	PUSH	HL
	LD	A,(PORT)
	LD	C,A
	INC	C
	LD	A,(MBYTE)
	OR	7
	AND	H
	LD	H,A	;normalisieren
	IN	E,(C)
	SET	0,E	;RESET
	OUT	(C),E
	BIT	3,E
	JR	NZ,INIC5R
;Bei angelegter VCC keine W{hlimpulse
	LD	DE,301H	;D mit COUNT
	LD	A,(MBYTE)
	AND	3
	ADD	A
	ADD	A
	ADD	3
	LD	B,A
	LD	A,(TYPE)
	RES	0,A
	CP	4
	JR	Z,DIAL
	DEC	B
	CP	64H
	JR	Z,DIAL
	DEC	B
	CP	2
	JR	Z,DIAL
	DEC	B
	JR	NZ,NDIAL
DIAL	OUT	(C),D
	OUT	(C),E
	DJNZ	DIAL
NDIAL	LD	A,34
	CALL	OS
	DEFB	14H	;WAIT
	SET	3,E	;5P
	OUT	(C),E
	LD	A,34
	CALL	OS
	DEFB	14H	;WAIT
	LD	A,(TYPE)
	CP	32H
	JR	NC,INIC5R
	SET	6,E	;/PGM inaktiv
INIC5R	SET	7,E	;/CE inaktiv
	RES	0,E	;RESET inaktiv
	OUT	(C),E
	LD	D,E
	SET	1,D	;COUNT
	JR	RDWHL2
RDWHL1
	OUT	(C),D
	OUT	(C),E	;hochz{hlen
	DEC	HL
RDWHL2	LD	A,L
	OR	H
	JR	NZ,RDWHL1
	RES	7,E	;/CE aktiv
	OUT	(C),E
	LD	A,C	;Port retten
	POP	HL
	POP	BC
	RET		;CY=0
;** 1 Byte lesen **
RDBYT0	;ohne stetes BRKT
	LD	A,L
	AND	1FH
	JR	NZ,RDNBRK
RDBYT	;FU: A:=(HL), CY=1&Z=1:BRK
	;VR: AF,DE
	CALL	OS
	DEFB	2AH	;BRKT
	JR	NC,RDNBRK
	CALL	RC
	DEFW	RDCLO-$-2
	XOR	A	;Z=1
	SCF
	RET		;BREAK
RDNBRK
	LD	A,L
	OR	A
	JR	NZ,RDNL0
	LD	A,(MBYTE)
	OR	7
	AND	H
	JR	NZ,RDNL0
	LD	A,H
	OR	A
	JR	Z,RDNL0
	CALL	RC
	DEFW	RDCLO-$-2
	CALL	OS
	DEFM	'#N{chsten '
	NOP
	CALL	RC
	DEFW	RDINI0-$-2
	RET	C
RDNL0	PUSH	BC
	LD	A,(PORT)
	LD	C,A
	IN	A,(C)	;LESEN
	INC	C
	IN	E,(C)
	LD	D,E
	SET	1,D
	OUT	(C),D
	OUT	(C),E
	POP	BC
	OR	A
	RET
 
;===READ=COMP=ERAT=CRC===
 
	DEFW	0D7D7H
	DEFM	'READ'
	DEFB	1
	XOR	A
	CALL	RC
	DEFW	FARG-$-2
	PUSH	DE
	CALL	RC
	DEFW	RDINI-$-2
	POP	DE
	RET	C
LES1
	PUSH	DE
	CALL	RC
	DEFW	RDBYT0-$-2
	POP	DE
	RET	C
	INC	HL
	LD	(DE),A
	INC	DE
	DEC	BC
	LD	A,B
	OR	C
	JR	NZ,LES1
	CALL	RC
	DEFW	RDCLO-$-2
	JR	MELDOK
 
	DEFW	0D7D7H
	DEFM	'COMP'
	DEFB	1
	XOR	A
	CALL	RC
	DEFW	FARG-$-2
	PUSH	DE
	CALL	RC
	DEFW	RDINI-$-2
	POP	DE
	RET	C
	EX	AF
VE1	;Einstieg NC'
	PUSH	DE
	CALL	RC
	DEFW	RDBYT-$-2
	POP	DE
	RET	C
	EX	DE,HL
	CP	M
	EX	DE,HL
	JR	Z,VEOK
	EX	AF
	SCF
	EX	AF
	CALL	OS
	DEFB	1CH
	CALL	OS
	DEFB	2BH
	CALL	OS
	DEFB	1BH
	LD	A,(DE)
	CALL	OS
	DEFB	1CH
	CALL	OS
	DEFB	2CH
VEOK	INC	DE
	INC	HL
	DEC	BC
	LD	A,B
	OR	C
	JR	NZ,VE1
	CALL	RC
	DEFW	RDCLO-$-2
	EX	AF
	RET	C
	CALL	OS
	DEFM	'#Vergleich '
	NOP
MELDOK	CALL	OS
	DEFM	'#OK.'
	DEFW	0D0AH
	NOP
	RET
 
	DEFW	0D7D7H
	DEFM	'ERAT'
	DEFB	1
	LD	A,0FFH
	CALL	RC
	DEFW	FARG-$-2
	AND	1	;CY=0,Z=/0(A)
	;NZ:vollst. CY Fehler
	EX	AF
	PUSH	DE
	CALL	RC
	DEFW	RDINI-$-2
	POP	DE
	RET	C
LT1
	PUSH	DE
	CALL	RC
	DEFW	RDBYT-$-2
	POP	DE
	RET	C
	PUSH	AF
	 EX	AF
	 JR	Z,LTFF
	 EX	AF
	CPL
	EX	DE,HL
	AND	M
	EX	DE,HL
	JR	LTW
LTFF
	 EX	AF
	INC	A
LTW	JR	Z,LTOK
	 EX	AF
	 SCF		;Fehler merken
	 JR	Z,LTFF2
	 EX	AF
	CALL	OS
	DEFM	'#Unbrennbar: '
	NOP
	CALL	OS
	DEFB	1BH	;HL,DE
	POP	AF
	CALL	OS
	DEFB	1CH	;A
	CALL	OS
	DEFB	2BH	;SPC
	LD	A,(DE)
	CALL	OS
	DEFB	1CH	;A
	CALL	OS
	DEFB	2CH	;CRLF
	JR	LTOK2
LTFF2
	 EX	AF
	CALL	OS
	DEFB	1AH
LTOK	POP	AF
LTOK2	INC	HL
	INC	DE
	DEC	BC
	LD	A,B
	OR	C
	JR	NZ,LT1
	CALL	RC
	DEFW	RDCLO-$-2
	EX	AF
	JR	C,ERATF
	EX	AF
	CALL	OS
	DEFM	'#EPROM '
	NOP
	EX	AF
	JR	NZ,ERATB
	CALL	OS
	DEFM	'#gel|scht'
	DEFW	0D0AH
	NOP
	RET
ERATB	CALL	OS
	DEFM	'#brennbar'
	DEFW	0D0AH
	NOP
	RET
ERATF	JR	NZ,ERATF2
	CALL	OS
	DEFB	2CH	;NL
ERATF2	CALL	OS
	DEFM	'#EPROM l|schen!'
	DEFW	0D0AH
	NOP
	RET
 
;================================
	DEFW	0D7D7H
	DEFM	'MCRC'
	DEFB	1
	XOR	A
	JR	POLY0
 
	DEFW	0D7D7H
	DEFM	'ECRC'
	DEFB	1
	SCF
POLY0	EX	AF
	LD	A,(0B781H)
	CP	1
	RET	Z	;1 Parameter
	JR	C,POLY11
	EX	DE,HL
	SBC	HL,DE
	LD	B,H
	LD	C,L
	EX	DE,HL
	 EX	AF
	 JR	C,POLY12
	 JR	POLY1
POLY11
	LD	HL,4000H
	LD	B,H
	LD	C,L
	 EX	AF
	 JR	NC,POLY1
	 EX	AF
	LD	H,L
	LD	A,(MBYTE)
	OR	7
	INC	A
	LD	B,A
	 EX	AF
POLY12	 EX	AF
	PUSH	DE
	CALL	RC
	DEFW	RDINI-$-2
	POP	DE
	RET	C
	 EX	AF
POLY1	 EX	AF
	LD	DE,0FFFFH
	LD	IY,0
PO1
	LD	A,M
	 EX	AF
	 JR	NC,POLY2
	 EX	AF
	PUSH	DE
	CALL	RC
	DEFW	RDBYT0-$-2
	POP	DE
	RET	C	;BRK
	 EX	AF
POLY2	 EX	AF
	PUSH	AF
	DEFB	0FDH
	ADD	L	;ADD LY
	DEFB	0FDH
	LD	L,A	;LD LY,A
	JR	NC,POLY3
	DEFB	0FDH
	INC	H	;INC HY
POLY3	POP	AF
	INC	HL
	XOR	D	;DE=lfd.Reg.
	LD	D,A
	RRCA
	RRCA
	RRCA
	RRCA
	AND	0FH
	XOR	D
	LD	D,A
	RRCA
	RRCA
	RRCA
	PUSH	AF
	AND	1FH
	XOR	E
	LD	E,A
	POP	AF
	PUSH	AF
	RRCA
	AND	0F0H
	XOR	E
	LD	E,A
	POP	AF
	AND	0E0H
	XOR	D
	LD	D,E
	LD	E,A
	DEC	BC
	LD	A,B
	OR	C
	JR	NZ,PO1
	PUSH	IY
	POP	HL
	EX	DE,HL
	CALL	OS
	DEFB	1BH	;HL,DE
	CALL	OS
	DEFM	'#(CRC-Polynom und '
	DEFM	'Pr}fsumme)'
	DEFW	0D0AH
	NOP
	 EX	AF
	 RET	NC
	CALL	RC
	DEFW	RDCLO-$-2
	RET
 
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded