Listing of file='BURNER.BAS;1F' on disk='vmedia/eprom_programmer-sector.ccvf'
10 PLOT 29,6,3,12,14,3,10,1:CLEAR 1000 20 PRINT "2716/2732 EPROM PROGRAMMER" 30 PRINT :PLOT 14,6,1,31,3,14,5:PRINT "*** IMPORTANT ***" 40 PLOT 6,6,15:PRINT " IN ORDER TO AVOID DAMAGING THE EPROMS," 50 PRINT "IT IS ESSENTIAL THAT YOU READ AND FOLLOW THE" 60 PRINT "INSTRUCTIONS CAREFULLY. IN PARTICULAR, DO NOT" 70 PRINT "INSERT OR REMOVE AN EPROM UNLESS INSTRUCTED TO," 80 PRINT "AND LEAVE THE READ/PGM SWITCH ON READ UNTIL" 90 PRINT "YOU ARE TOLD TO CHANGE IT.":PRINT 100 PLOT 6,2:PRINT "POWER-UP THE PROGRAMMER AND HIT <RETURN>" 110 INPUT "";A$ 115 OUT 51,130 120 PLOT 27,4:PRINT "RUN EPROM":PLOT 27,27 130 BF = 45056 150 INPUT "TYPE OF EPROM (2716 OR 2732): ";ET 160 IF ET= 0 THEN ET= 2716 170 IF ET< > 2716 AND ET< > 2732 GOTO 150 175 POKE 40960,0:IF ET= 2732 THEN POKE 40960,1 180 AM = 7:IF ET= 2732 THEN AM= 15 190 EN = BF+ (AM+ 1)* 256- 1 195 GOTO 220 200 INPUT "CHANGE EPROM TYPE (Y/N) ? ";A$ 210 IF A$= "Y" GOTO 150 220 INPUT "PROGRAM, READ, MEMORY EDIT OR ERASE CHECK ? ";OP$ 225 OUT 51,130:OUT 48,0:OUT 50,0 230 IF OP$= "P" GOTO 500 232 IF OP$= "M" GOTO 265 235 IF OP$= "E" GOTO 700 240 GOSUB 1000 250 PRINT :INPUT "ENTER MEMORY DISPLAY/EDIT MODE (Y/N) ? ";A$ 260 IF A$< > "Y" GOTO 270 265 GOSUB 5000 270 INPUT "PROGRAM AN EPROM (Y/N) ? ";A$ 280 IF A$< > "Y" GOTO 200 290 GOSUB 2000 300 GOTO 200 500 INPUT "DATA ALREADY IN MEMORY (Y/N) ? ";A$ 510 IF A$= "Y" GOTO 600 520 INPUT "DO YOU NEED TO READ AN EPROM (Y/N) ? ";A$ 530 IF A$= "Y" GOTO 240 540 INPUT "ENTER NAME OF MEMORY IMAGE FILE: ";F$ 550 PLOT 27,4:PRINT "LOAD ";F$;"B000":PLOT 27,27 560 INPUT "WAS LOAD SUCCESSFUL (Y/N) ? ";A$ 570 IF A$< > "Y" GOTO 540 580 INPUT "EDIT MEMORY (Y/N) ? ";A$ 590 IF A$= "Y" THEN GOSUB 5000 600 GOSUB 3000 610 GOTO 200 700 GOSUB 2000 710 GOTO 200 1000 REM *** READ AN EPROM INTO MEMORY *** 1010 REM 1020 PLOT 12:PRINT "READ OPERATION":PRINT 1030 PRINT "THE READ/PGM SWITCH SHOULD BE ON READ." 1040 PRINT "INSERT THE EPROM IN THE CORRECT SOCKET." 1050 INPUT "HIT <RETURN> WHEN READY ";A$ 1060 PRINT :PRINT " READING ..." 1070 S = CALL (0) 1080 IF S> = 0 GOTO 1200 1160 PRINT :PRINT "READ COMPLETE" 1170 PRINT :PRINT "REMOVE THE EPROM IF NO LONGER REQUIRED." 1180 RETURN 1200 PRINT :PRINT "*** ERROR DURING READ AT LOCATION ";S;" ***":PRINT 1210 GOTO 1000 2000 REM *** ERASE CHECK *** 2010 REM 2020 PLOT 12:PRINT "ERASE CHECK":PRINT 2030 PRINT "THE READ/PGM SWITCH SHOULD BE ON READ." 2040 PRINT "INSERT THE EPROM IN THE CORRECT SOCKET." 2050 INPUT "HIT <RETURN> WHEN READY ";A$ 2060 PRINT :PRINT " CHECKING ..." 2070 S = CALL (2):IF S> = 0 GOTO 2100 2080 PRINT :PRINT "EPROM IS COMPLETELY ERASED." 2090 RETURN 2100 PRINT :PRINT "*** EPROM NOT ERASED AT LOCATION ";S;" ***":PRINT 2110 RETURN 3000 REM *** PROGRAM AN EPROM *** 3010 REM 3020 PLOT 12:PRINT "PROGRAM OPERATION":PRINT 3030 PRINT "INSERT AN ERASED EPROM IN THE CORRECT SOCKET" 3040 INPUT "AND HIT <RETURN> ";A$ 3050 PRINT "MOVE THE READ/PGM SWITCH TO PGM." 3060 INPUT "HIT <RETURN> WHEN READY ";A$ 3070 PRINT :PRINT " PROGRAMMING ..." 3080 S = CALL (3) 3090 IF S> = 0 GOTO 3200 3100 PRINT :PLOT 7:PRINT "PROGRAMMING COMPLETE" 3101 PRINT :PRINT "TURN THE READ/PGM SWITCH TO READ" 3102 INPUT "AND THEN HIT <RETURN> ";A$ 3110 PRINT :INPUT "PERFORM A VERIFY PASS (Y/N) ? ";A$ 3120 IF A$= "N" THEN RETURN 3130 PRINT :PRINT " VERIFYING ..." 3140 S = CALL (1) 3150 IF S> = 0 GOTO 3200 3160 PRINT :PRINT "VERIFY COMPLETE" 3170 RETURN 3200 PRINT :PRINT "*** PROGRAMMING ERROR AT LOCATION ";S;" ***":PRINT 3210 RETURN 5000 REM *** MEMORY DISPLAY/EDIT ROUTINE *** 5010 REM 5015 PLOT 12:PRINT "MEMORY DISPLAY/EDIT":PRINT 5020 PRINT "ADDRESSES AND DATA MUST ALL BE IN THE SAME RADIX." 5030 INPUT "RADIX (8,10,16): ";RX 5040 IF RX= 0 THEN RX= 16 5050 IF RX< > 8 AND RX< > 10 AND RX< > 16 GOTO 5030 5060 QB = RX 5070 PRINT "ADDRESSES MAY BE SPECIFIED AS RELATIVE TO THE START" 5080 PRINT "OF THE PROM, OR AS ABSOLUTE VALUES, BY SPECIFYING" 5090 PRINT "THE BASE (STARTING) ADDRESS FOR THE PROM." 5100 INPUT "EPROM BASE ADDRESS (0=RELATIVE ADDRESSING): ";QS$ 5110 QP = 1:GOSUB 10020 5120 BA = QN 5200 INPUT "COMMAND>";C$ 5220 B$ = LEFT$ (C$,1) 5225 IF B$= "/" THEN RETURN 5230 IF B$= "D" OR B$= "E" OR B$= "F" GOTO 5300 5240 PRINT "VALID COMMANDS ARE:" 5245 PRINT "D ADDR = DISPLAY STARTING AT GIVEN ADDRESS" 5250 PRINT "E ADDR = ENTER EDIT MODE AT ADDRESS" 5255 PRINT "F BYTE = FILL MEMORY WITH BYTE" 5280 PRINT "/ = EXIT THIS MODE" 5290 GOTO 5200 5300 QP = 2:QS$ = C$ 5310 GOSUB 10020 5320 ST = QN- BA+ BF 5330 IF ST> = BF AND ST< = EN GOTO 5400 5340 PRINT :PRINT "*** INVALID ADDRESS ***":PRINT 5350 GOTO 5200 5400 IF B$= "E" GOTO 5800 5410 IF B$= "F" GOTO 7000 5420 PLOT 12:PRINT "ADDRESS",TAB( 10),"DATA BYTES":PRINT 5430 FOR I= 1 TO RX 5440 QN = ST+ (I- 1)* RX- BF+ BA:GOSUB 20020 5450 PLOT 6,3:PRINT QS$;": ",TAB( 10);:PLOT 6,6 5460 FOR J= 1 TO RX 5470 AD = ST+ (I- 1)* RX+ (J- 1) 5480 IF AD> EN GOTO 5600 5490 QN = PEEK (AD):GOSUB 20020:PRINT QS$;" "; 5500 NEXT J 5510 PRINT " " 5520 NEXT I 5530 PRINT :PLOT 6,2:INPUT "<RETURN> = CONTINUE, / = STOP ";A$ 5540 IF A$= "/" GOTO 5200 5550 ST = ST+ RX* RX 5560 GOTO 5420 5600 PRINT "*** END OF EPROM ***":PRINT 5610 INPUT "HIT <RETURN> TO CONTINUE ";A$ 5620 GOTO 5200 5800 REM MEMORY EDIT 5810 ST = ST- 1 5820 ST = ST+ 1 5830 IF ST> EN GOTO 5600 5840 QN = ST- BF+ BA:GOSUB 20020 5850 PLOT 6,3:PRINT QS$;": ";:PLOT 6,2 5860 QN = PEEK (ST):GOSUB 20020:PRINT QS$;" "; 5870 INPUT "";C$ 5880 B$ = LEFT$ (C$,1) 5890 IF B$= "=" GOTO 6500 5900 IF LEN (C$)= 1 AND B$= "0" GOTO 5820 5910 IF B$= "+" GOTO 5820 5920 IF B$= "-" THEN ST= ST- 2:GOTO 5820 5930 IF B$= "/" GOTO 5200 5940 IF B$= "@" THEN B$= "E":GOTO 5300 5950 PRINT "VALID COMMANDS ARE:" 5960 PRINT "= BYTE = REPLACE BYTE WITH NEW VALUE" 5970 PRINT "+ OR <RETURN> = MOVE TO NEXT BYTE" 5980 PRINT "- = PREVIOUS BYTE" 5990 PRINT "@ ADDR = GOTO ADDRESS" 6000 PRINT "/ = EXIT EDIT MODE" 6010 GOTO 5840 6500 QS$ = C$ 6510 LN = LEN (QS$) 6520 FOR I= 2 TO LN 6530 IF MID$ (QS$,I,1)< > " " GOTO 6560 6540 NEXT I 6550 PRINT "NO DATA SPECIFIED":GOTO 5840 6560 QP = I:GOSUB 10020 6570 POKE ST,QN 6580 GOTO 5810 7000 REM *** FILL BUFFER WITH BYTE *** 7010 ST = ST- BF+ BA:IF ST< 256 GOTO 7060 7020 PRINT :PRINT "*** DATA BYTE MUST BE 00-FFH ***":PRINT 7030 GOTO 5200 7060 FOR I= BF TO EN 7070 POKE I,ST 7080 NEXT I 7090 GOTO 5200 10000 REM *** BINARY/OCTAL/HEX ASCII TO INTEGER *** 10001 GOTO 10008 10002 QB= 2 10004 GOTO 10020 10008 QB= 8 10010 GOTO 10020 10016 QB= 16 10020 QN= 0:QL= LEN (QS$) 10022 IF QP> QL THEN RETURN 10025 FOR QJ= QP TO QL 10030 IF MID$ (QS$,QJ,1)< > " " GOTO 10045 10035 NEXT QJ 10040 RETURN 10045 FOR QI= QJTO QL 10050 QC= ASC (MID$ (QS$,QI,1))- 48 10055 IF QC> 9THEN QC= QC- 7 10060 IF QC > = QB GOTO 10100 10070 IF QC< 0GOTO 10100 10080 QN= QN* QB+ QC 10090 NEXT QI 10100 QP= QI+ 1 10110 RETURN 20000 REM *** INTEGER TO BINARY/OCTAL/HEX ASCII *** 20001 GOTO 20008 20002 QB= 2 20004 GOTO 20020 20008 QB= 8 20010 GOTO 20020 20016 QB= 16 20020 QS$= "":QD= QN 20030 QT= QD- INT (QD/ QB)* QB 20040 IF QT> 9THEN QT= QT+ 7 20050 QS$= CHR$ (QT+ 48)+ QS$ 20060 QD= INT (QD/ QB) 20070 IF QD< > 0GOTO 20030 20080 QT = LEN (QS$) 20090 QD = 3:IF QB= 16 THEN QD= 2 20100 IF QT> = QD THEN RETURN 20110 FOR QI= 1 TO (QD- QT) 20120 QS$ = " "+ QS$ 20130 NEXT QI 20140 RETURN 30000 IF QC> 126THEN QC= QC- 128 30002 IF QC< 0 THEN QC= 63 30010 IF QC> 31GOTO 30020 30012 QC = QC+ 64 30014 QS$ = QS$+ CHR$ (94)+ CHR$ (QC) 30016 RETURN 30020 QS$= QS$+ CHR$ (QC) 30030 RETURN