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

GAL3AASM;GAL-BRENNER FUER BASIC
;Adresse 0: UP-Nummer
;	 1: Parameter oder Ergebnis
;GAL-Typ: 0-GAL16V8
	; 1-GAL20V8
	; 2-GAL16V8A
	; 3-GAL20V8A
OS	EQU	0F003H
	ORG	6000H
BEGIN	LD	A,(0)
	LD	B,A
	DJNZ	GALRD
	LD	A,(1)
	LD	(TYPE),A
	LD	BC,780H
MOSU	INC	B
	RET	Z
	IN	A,(C)
	LD	E,0C0H
	CP	0CEH
	JR	Z,FND1
	LD	E,4
	CP	0EFH
	JR	NZ,MOSU
FND1	LD	A,1
	OUT	(C),A
	LD	A,E
	LD	(PORT),A
	LD	C,A
	XOR	A
	OUT	(C),A
	INC	C
	OUT	(C),A
	INC	C
	DEC	A
	OUT	(C),A
	INC	A
	OUT	(C),A
	INC	C
	DEC	A
	OUT	(C),A
	LD	A,2
	OUT	(C),A
	LD	HL,FUSEMAP
	LD	BC,339
GTYP1	LD	M,0FFH
	CPI
	RET	PO
	JR	GTYP1
GALRD
	DJNZ	GALPRG
	JR	GALRD0
GALPRG
	DJNZ	GALCMP
	;Brennen
	CALL	EDITONB
	LD	HL,0
	LD	A,(TYPE)
	RRA
	LD	B,32
	JR	NC,GALBR1
	LD	B,40
	;Fusemap
GALBR1	PUSH	HL
	PUSH	BC
	CALL	BRLINE
	POP	BC
	POP	HL
	INC	L
	DJNZ	GALBR1
	;Signatur
	LD	A,(TYPE)
	RRA
	LD	HL,2056
	LD	A,32
	JR	NC,GALBR2
	LD	HL,2568
	LD	A,40
GALBR2	OUT	(C),A
	LD	B,64
GALBR3	CALL	SH1OUT
	INC	HL
	DJNZ	GALBR3
	CALL	IMPULSB
	;Architektursteuerwort ACW
	LD	A,60
	OUT	(C),A
	CALL	ACWHAND
	CALL	IMPULSB
	JP	EDITOFF
GALCMP
	DJNZ	BLKERA
	LD	HL,0
	LD	(1),HL
GALRD0	;Lesen oder Vergleichen
	CALL	EDITONR
	LD	HL,0
	LD	A,(TYPE)
	RRA
	LD	B,32
	JR	NC,GALRD1
	LD	B,40
	;Fusemap
GALRD1	PUSH	HL
	PUSH	BC
	CALL	RCLINE
	POP	BC
	POP	HL
	INC	L
	DJNZ	GALRD1
	;Signatur
	LD	A,(TYPE)
	RRA
	LD	HL,2056
	LD	A,32
	JR	NC,GALRD2
	LD	HL,2568
	LD	A,40
GALRD2	OUT	(C),A
	CALL	IMPULSR
	LD	B,64
GALRD3	CALL	SH1OUT
	INC	HL
	DJNZ	GALRD3
	;Architektursteuerwort ACW
	LD	A,60
	OUT	(C),A
	CALL	IMPULSR
	CALL	ACWHAND
	JP	EDITOFF
;**************************
BLKERA
	DJNZ	JSAVE
	CALL	EDITONB
	LD	A,63
	OUT	(C),A
	XOR	A
	DEC	A
	CALL	SHDIN
	CALL	IMPULSB
	CALL	EDITOFF
	RET
JSAVE
	DJNZ	BITRD
	IN	A,88H
	BIT	2,A
	JR	NZ,SAVPG
	CALL	0F018H
	CALL	SAVPG
	CALL	0F01BH
	RET
SAVPG
	LD	HL,TYPE
	LD	(0B782H),HL
	LD	A,M
	RRA
	LD	HL,FUSEMAP+275
	JR	NC,SAVPG1
	LD	HL,FUSEMAP+339
SAVPG1	LD	(0B784H),HL
	LD	A,2
	LD	(0B781H),A
	LD	HL,(1)
	CALL	OS
	DEFB	36H
	RET
BITRD
	DJNZ	BITSET
	CALL	ADDR
	AND	M
	LD	HL,0
	JR	Z,BITRD1
	DEC	HL
BITRD1	LD	(1),HL
	RET
BITSET
	DJNZ	RESBIT
	CALL	ADDR
	OR	M
	LD	M,A
	RET
RESBIT
	DJNZ	SECUR
	CALL	ADDR
	CPL
	AND	M
	LD	M,A
	RET
SECUR
	DJNZ	UPFLT
	CALL	EDITONB
	LD	A,61
	OUT	(C),A
	XOR	A
	CALL	SHDIN
	CALL	IMPULSB
	CALL	EDITOFF
	RET
UPFLT
	LD	HL,-1
	LD	(1),HL
	RET
 
ACWHAND	;ACW-gemeinsames UP
	;HL steht auf AC1 19
	LD	A,(TYPE)
	BIT	1,A
	JR	NZ,ACWHA;A-Typen
	LD	DE,8
	ADD	HL,DE
	LD	B,32
GALRD4	CALL	SH1OUT	;PTF
	INC	HL
	DJNZ	GALRD4
	LD	DE,-32-8-64-8
	ADD	HL,DE
	LD	B,4
GALRD5	CALL	SH1OUT	;XOR
	INC	HL
	DJNZ	GALRD5
	LD	DE,4+64+8+64+1
	ADD	HL,DE
	CALL	SH1OUT	;AC0
	LD	DE,-1-64-8
	ADD	HL,DE
	LD	B,8
GALRD6	CALL	SH1OUT	;AC1
	INC	HL
	DJNZ	GALRD6
	LD	DE,64
	ADD	HL,DE
	CALL	SH1OUT	;SYN
	LD	DE,-64-8-64-4
	ADD	HL,DE
	LD	B,4
GALRD7	CALL	SH1OUT	;XOR
	INC	HL
	DJNZ	GALRD7
	LD	DE,64+8+32
	ADD	HL,DE
	LD	B,32
GALRD8	CALL	SH1OUT	;PTF
	INC	HL
	DJNZ	GALRD8
	RET
 
ACWHA	;Extrawurst f}r A-Typen
	LD	DE,-64-8
	ADD	HL,DE
	LD	B,4
ACWHA1	CALL	SH1OUT	;XOR
	INC	HL
	DJNZ	ACWHA1
	LD	DE,4+64+8+64+1
	ADD	HL,DE
	CALL	SH1OUT	;AC0
	LD	DE,-1-64-8
	ADD	HL,DE
	LD	B,4
ACWHA2	CALL	SH1OUT	;AC1
	INC	HL
	DJNZ	ACWHA2
	LD	DE,4
	ADD	HL,DE
	LD	B,64
ACWHA3	CALL	SH1OUT	;PTF
	INC	HL
	DJNZ	ACWHA3
	LD	DE,-64-4
	ADD	HL,DE
	LD	B,4
ACWHA4	CALL	SH1OUT	;AC1
	INC	HL
	DJNZ	ACWHA4
	LD	DE,64
	ADD	HL,DE
	CALL	SH1OUT	;SYN
	LD	DE,-64-8-64-4
	ADD	HL,DE
	LD	B,4
ACWHA5	CALL	SH1OUT	;XOR
	INC	HL
	DJNZ	ACWHA5
	RET
 
ADDR	;berechnet Adresse aus (1)
	;um in HL=Adr und A=Bitregister
	LD	HL,(1)
ADDR0	LD	A,L
	AND	7
	LD	B,A
	INC	B
	LD	A,80H
ADDR2	RLCA
	DJNZ	ADDR2
	LD	B,3
ADDR1	SRL	H
	RR	L
	DJNZ	ADDR1
	LD	DE,FUSEMAP
	ADD	HL,DE
	RET
SH1IN	;1 Einzelbit einschieben
	LD	A,E
	AND	M
	CALL	SHDIN
	POP	HL
	RET
BRLINE	;C ist immer Portadresse!
	OUT	(C),L
	CALL	ADDR0
	LD	E,A
	LD	B,64
BRLIN1	LD	A,E
	AND	M
	CALL	SHDIN	;Z-Flag
	INC	HL
	INC	HL
	INC	HL
	INC	HL
	LD	A,(TYPE)
	RRA
	JR	NC,BRLIN2 ;bei 16V8
	INC	HL
BRLIN2	DJNZ	BRLIN1
	CALL	IMPULSB
	RET
SH1OUT	;1 Einzelbit auslesen oder
	;vergleichen ODER einschieben
	;PE:HL:JEDEC-Adresse
	PUSH	HL
	PUSH	BC
	CALL	ADDR0
	POP	BC
	LD	E,A
	LD	A,(0)
	CP	3
	JR	Z,SH1IN
	CALL	SHDOUT
	CALL	RCBIT
	POP	HL
	RET
RCLINE	;liest oder vergleicht
	OUT	(C),L
	CALL	ADDR0
	LD	E,A
	CALL	IMPULSR
	LD	B,64
RCLIN1	CALL	SHDOUT
	CALL	RCBIT
	INC	HL
	INC	HL
	INC	HL
	INC	HL
	LD	A,(TYPE)
	RRA
	JR	NC,RCLIN2 ;bei 16v8
	INC	HL
RCLIN2	DJNZ	RCLIN1
	RET
RCBIT	;Lese oder teste Bit
	;PE: E:Bitnummer
	LD	A,(0)
	CP	2
	JR	Z,READ
	LD	A,M
	XOR	D
	AND	E
	CALL	NZ,UPFLT
	RET
READ	LD	A,D
	AND	E
	LD	D,A
	LD	A,E
	CPL
	AND	M
	OR	D
	LD	M,A
	RET
 
SHDOUT	;Bit ausschieben
	INC	C
	IN	A,(C)
	DEC	C
	RRA
	RRA
	SBC	A
	LD	D,A
	IN	A,(C)
	JR	SHDO1
 
SHDIN	;Z-Flag-Komplement einschieben
	JR	Z,BRRES
	IN	A,(C)
	SET	7,A
	JR	BRSET
BRRES	IN	A,(C)
	RES	7,A
BRSET	OUT	(C),A
SHDO1	SET	6,A
	OUT	(C),A
	NOP
	NOP
	RES	6,A
	OUT	(C),A
	RET
 
IMPULSB	;Programmierimpuls
	INC	C
	IN	A,(C)
	RES	0,A
	OUT	(C),A
	LD	B,0
W10MS	PUSH	AF
	POP	AF
	PUSH	AF
	POP	AF
	PUSH	AF
	POP	AF
	DJNZ	W10MS
IMPULSE	SET	0,A
	OUT	(C),A
	DEC	C
	RET
 
IMPULSR	;Leseimpuls
	INC	C
	IN	A,(C)
	RES	0,A
	OUT	(C),A
	JR	IMPULSE
 
EDITONR	;Lesespannungen anlegen
	LD	A,(PORT)
	LD	C,A
	INC	C
	LD	A,10H
	OUT	(C),A
	INC	A
	OUT	(C),A
	SET	6,A
	OUT	(C),A
	DEC	C
	RET
 
EDITONB	;Brennspannungen anlegen
	CALL	EDITONR
	INC	C
	SET	7,A
	OUT	(C),A
	SET	5,A
	OUT	(C),A
	LD	A,24
	CALL	WAIT
	DEC	C
	RET
 
EDITOFF	;Spannungen aus
	XOR	A
	OUT	(C),A
	INC	C
	IN	A,(C)
	BIT	5,A
	JR	Z,EDITOF1
	RES	5,A
	OUT	(C),A
	LD	A,48
	CALL	WAIT
EDITOF1
	LD	A,51H
	OUT	(C),A
	RES	6,A
	OUT	(C),A
	DEC	A
	OUT	(C),A
	XOR	A
	OUT	(C),A
	RET
WAIT
	LD	B,A
	XOR	A
WAIT1	CALL	WTUP
	DJNZ	WAIT1
	RET
WTUP	DEC	A
	RET	Z
	PUSH	AF
	POP	AF
	JR	WTUP
 
	DEFW	7F7FH
	DEFM	'GAL'
	DEFB	1
	OR	A
	JR	Z,HINWEIS
	LD	A,L
	LD	(0),A
	LD	(1),DE
	CALL	BEGIN
	LD	HL,(1)
	CALL	OS
	DEFB	1AH
	RET
HINWEIS
	CALL	OS
	DEFM	'#UP-Nummer Parameter'
	DEFW	0D0AH
	NOP
	RET
 
	DEFW	7F7FH
	DEFM	'READLN'
	DEFB	1
	CALL	OS
	DEFM	'#NR. nach Puffer'
	NOP
	PUSH	HL
	LD	HL,FUSEMAP
	CALL	OS
	DEFB	1AH
	CALL	OS
	DEFB	2CH
	POP	HL
	CALL	EDITONR
	LD	A,L
	OUT	(C),A	;Zeilennummer
	LD	A,2
	LD	(0),A
	LD	HL,0
	CALL	IMPULSR
	LD	B,80	;Bytes
RL1	CALL	SH1OUT
	INC	HL
	DJNZ	RL1
	JP	EDITOFF
 
	DEFW	7F7FH
	DEFM	'WRITELN'
	DEFB	1
	CALL	OS
	DEFM	'#Puffer nach Nr.'
	DEFW	0A0DH
	NOP
	CALL	EDITONB
	LD	A,L
	OUT	(C),A	;Zeilennummer
	LD	A,3	;Brennen
	LD	(0),A
	LD	HL,0
	LD	B,80	;Bytes
WL1	CALL	SH1OUT
	INC	HL
	DJNZ	WL1
	CALL	IMPULSB
	JP	EDITOFF
PORT	DEFB	0
TYPE	DEFB	0
FUSEMAP	;

Detected encoding: ASCII (7 bit)2