Compucolor.org – Virtual Media

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