Compucolor.org – Virtual Media

Listing of file='EPROM.MAC;08' on disk='vmedia/eprom_programmer-sector.ccvf'

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;	EPROM PROGRAMMER UTILITY ROUTINES
;

CALVEC	EQU	8202H	;BASIC CALL(X) VECTOR

PORTA	EQU	48
PORTB	EQU	49
PORTC	EQU	50
CNTRL	EQU	51

EPTYPE:	DB	0	;EPROM TYPE - 0=2716, 1=2732
BUFADR:	DW	0B000H	;MEMORY BUFFER ADDRESS

	EXTRN	MSEC50

;	SETUP THE CALL VECTOR AND EXIT

EPROM:	DI
	MVI	A,(JMP)
	STA	CALVEC
	LXI	H,EXEC
	SHLD	CALVEC+1
	EI
	MVI	B,0
	RET

;	EXECUTE BASIC'S CALL FUNCTION
;
;	VALUES ON ENTRY:
;	   DE - OPERATION CODE (ONLY LOW ORDER BYTE IS USED)
;		0 = READ PROM INTO MEMORY
;		1 = VERIFY PROM AGAINST MEMORY
;		2 = CHECK THAT PROM IS ERASED
;		3 = BURN PROM
;		OTHER VALUES ARE IGNORED
;
;	RETURNS:
;	   DE - STATUS CODE
;		-1 = SUCCESS
;		POSITIVE = ADDRESS WHERE FAILURE OCCURRED
;
;	   MEMORY BUFFER IS MODIFIED AS REQUIRED.
;

EXEC:	LHLD	BUFADR	;SETUP BUFFER START ADDRESS
	LXI	B,1000H	;AND ITS LENGTH
	LDA	EPTYPE	;CHECK PROM TYPE
	ORA	A
	JNZ	LENOK
	LXI	B,800H	;   AND ADJUST BUFFER LENGTH IF NEEDED
LENOK:	XRA	A	;SETUP FOR READ
	STA	VFYFLG
	STA	ERSCHK
	MOV	A,E
	ORA	A
	JZ	READ
	CPI	1
	JNZ	ERSTST

	MVI	A,0FFH	;INDICATE VERIFY REQUESTED
	STA	VFYFLG
	JMP	READ

ERSTST:	CPI	2
	JNZ	BRNTST
	MVI	A,0FFH
	STA	ERSCHK

;	READ A PROM WITH OPTIONS FOR VERIFY OR ERASE CHECK

READ:	LXI	D,0
	MVI	A,130	;INIT 8255 FOR INPUT
	OUT	CNTRL
	XRA	A	;CLEAR CHIP-ENABLE
	OUT	PORTC

RD10:	MOV	A,E	;OUTPUT ADDRESS
	OUT	PORTA
	MOV	A,D
	OUT	PORTC
	LDA	EPTYPE
	ORA	A
	JZ	RD20	;OK IF 2716 (2716 ALWAYS ENABLED)
	MOV	A,D	;ENABLE CHIP IF 2732
	ORI	10H
	OUT	PORTC
RD20:	NOP		;WAIT - JUST TO BE SURE
	IN	PORTB	;READ THE BYTE
	PUSH	PSW
	MOV	A,D	;DISABLE 2732
	OUT	PORTC

	LDA	VFYFLG
	ORA	A
	JNZ	VERIFY
	LDA	ERSCHK
	ORA	A
	JNZ	CHECK

	POP	PSW
	MOV	M,A	;STORE BYTE
	JMP	NEXT

VERIFY:	POP	PSW
	CMP	M	;COMPARE WITH MEMORY
	JNZ	FIN	;RETURN WITH DE=OFFSET OF BAD BYTE
	JMP	NEXT

CHECK:	POP	PSW
	CPI	0FFH	;SEE IF ERASED
	JNZ	FIN	;RETURN WITH DE=OFFENDING ADDRESS

NEXT:	INX	H
	INX	D
	DCX	B
	MOV	A,C
	ORA	B
	JZ	OK
	JMP	RD10

;	BURN A PROM

BRNTST:	CPI	3
	RNZ
BURN:	LXI	D,0
	MVI	A,128	;SETUP FOR OUTPUT ON PORT B
	OUT	CNTRL
	XRA	A
	OUT	PORTC

WR10:	MOV	A,E	;OUTPUT THE ADDRESS
	OUT	PORTA
	MOV	A,D
	OUT	PORTC
	MOV	A,M	;OUTPUT THE DATA BYTE
	OUT	PORTB
	NOP		;WAIT UNTIL STABLE

;	BURN IT!

	MVI	A,9
	OUT	CNTRL	;SET PGM PIN
	CALL	MSEC50	;50 MILLISEC PROGRAM PULSE
	MVI	A,8
	OUT	CNTRL	;RESET PGM PIN

AGAIN:	INX	H
	INX	D
	DCX	B
	MOV	A,C
	ORA	B
	JZ	OK
	JMP	WR10

OK:	LXI	D,-1	;INDICATE SUCCESS

FIN:	MVI	A,130
	OUT	CNTRL	;RESET 8255 FOR INPUT
	OUT	CNTRL	;INSURANCE ...
	XRA	A
	OUT	PORTA
	OUT	PORTC
	RET

VFYFLG:	DB	0	;VERIFY FLAG
ERSCHK:	DB	0	;ERASE CHECK FLAG

	END	EPROM