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