1000 REM -- Start -- 1002 CLEAR:PD=31000:PE=31032:POKE 15,80:REM 80 column. 1003 REM adr31000-31031=32byte PROM data content 1004 REM adr31032-31039=8byte(byte to bit conversion) 1005 REM adr31050-31081=Manual Data 1006 REM adr31044=Manual Data ON/OFF POKE adr,169/POKE adr,0 1007 CWR=32771:PA=32768:PB=32769:PC=32770 1008 REM CWR register,PA=adress portA,PB=port B,PC=port C 1009 REM Initialize port A,B,C (chip 8255) 1010 POKE CWR,137: REM CWR register port A,B=OUT,Port C=IN 1011 POKE PA,0:POKE PB,0:REM PA=null,PB=null 1012 REM -- Options -- 1013 PRINT CHR$(12):PRINT:REM CLS-for HyperTerminal 1014 IF PEEK(31044)=169 THEN 1064 1025 IF PEEK(34044)=36 OR PEEK(31044)=0 THEN 1035 1035 FOR F=PD+50 TO PD+81:POKE F,0:NEXT F 1064 PRINT TAB(23);"SBC6502 / 32kB RAM + 8255A":PRINT 1065 PRINT TAB(17);"Turn ON the power to the programmer !" 1066 PRINT TAB(24);"No PROM in progr.socket !":PRINT 1070 IF PEEK(31044)=169 THEN PRINT TAB(24);"- Manual Data is ON ! -" 1075 IG=16:IF PEEK(31044)=169 THEN IG=IG-2 1077 FOR F=0 TO IG:PRINT:NEXT F 1079 PRINT TAB(71);"final":PRINT TAB(70);"ver.1.04";:GOSUB 2000 1089 REM -- MENU -- 1090 Z=0:X=0:Y=0:VP=0:POKE PA,0:POKE PB,0:IG=0:ZA=0:GOSUB 8760 1100 PRINT: PRINT TAB(30);"Your choice:";:INPUT A$ 1102 IF A$="H" THEN 4200 1104 IF A$="D" THEN 4300 1106 IF A$="R" THEN IG=2:GOTO 5000 1108 IF A$="T" THEN 6000 1110 IF A$="V" THEN VP=1:GOTO 8000 1112 IF A$="W" AND PEEK(31044)=169 THEN 2500 1114 IF A$="W" THEN 7000 1116 IF A$="S" THEN IG=1:GOTO 1500 1118 IF A$="Q" THEN PRINT CHR$(12);:END 1120 IF A$="I" THEN 2200:REM Hidden - Jump to backdoor 1200 GOSUB 1999:GOTO 1090 1500 REM -- Subroutine analyzer part1 -- 1510 PRINT CHR$(12):POKE 15,80:REM CLS 1515 PRINT TAB(8);"Reprogramming an already programmed PROM." 1520 PRINT TAB(18);"(S - special mode.)":PRINT 1525 PRINT " You carry out this reprogramming at your own risk." 1530 PRINT " Only a 0 value can be overwritten to a value of 1. An" 1535 PRINT " already entered value of 1 cannot be overwritten to 0 !" 1540 PRINT " In this special mode,the standard overwrite protections" 1550 PRINT " of the already programmed ROM are disabled.":PRINT 1555 PRINT TAB(4);" It is assumed that you know what you are doing," 1556 PRINT TAB(23);"good luck !":PRINT 1560 IF PEEK(31044)=0 OR PEEK(31044)=36 THEN 1562 1561 GOTO 1564 1562 PRINT TAB(4);"Press (P) - Insert PROM for reprog. + execution" 1564 IF PEEK(31044)=169 THEN PRINT TAB(17);"Press (P) - for analyze" 1565 IF PEEK(31044)=169 THEN ZA=1 1566 PRINT TAB(28);"or" 1567 PRINT TAB (12);"Press (I) - for backdoor routines":PRINT 1570 PRINT TAB(28);:INPUT A$ 1580 IF A$="I" THEN 2200 1591 IF A$="P" THEN Z=1:GOTO 3000:REM JUMP TO ANALYZE 1592 GOSUB 1999:GOTO 1510 1600 REM -- Direct writing -- 1830 IF ER>0 THEN ER=0:PRINT TAB(25);"";:GOTO 1840 1835 PRINT TAB(7);"(Y)es - execute direct write into PROM /"; 1840 PRINT " (N)o - go back to the menu" 1845 PRINT TAB(38);:INPUT A$ 1850 IF A$="N" THEN 1090 1860 IF A$="Y" THEN Z=1:GOTO 7020:REM JUMP TO DIRECT WRITE PROM 1870 GOSUB 1999:GOTO 1830 1998 REM -- Subroutine Wrong input -- 1999 PRINT " Wrong input !":PRINT A$:GOSUB 2000:RETURN 2000 REM -- Waiting subroutines -- 2010 FOR F=0 TO 10000:NEXT F:RETURN 2050 FOR F=0 TO 100:NEXT F:RETURN 2100 FOR F=0 TO 500:NEXT F:RETURN 2200 REM -- Backdoor routine -- 2207 PRINT CHR$(12):PRINT TAB(28);"Igis Backdoor Helper 1.0:" 2211 IF PEEK(31044)=169 THEN GOTO 2305 2212 IF PEEK(31044)=0 THEN PRINT TAB(29);"Manual DATA mode is OFF" 2214 IF PEEK(31044)=0 THEN 2320 2215 IF PEEK(31044)=36 THEN PRINT TAB(27);"New manual DATA mode inp.!" 2217 PRINT:GOTO 2320 2220 A=0:Q=0:S=0:PRINT:FOR F=PD+50 TO PD+81 2230 PRINT "Adress:";F;:PRINT" byte no:"; 2231 IF A<10 THEN PRINT " ";A; 2232 IF A>=10 THEN PRINT A; 2233 PRINT " byte content:"; 2235 INPUT Q:POKE F,Q:A=A+1:S=S+Q 2240 NEXT F 2250 PRINT TAB(34);"CRC =";S:Q=0:S=0:GOSUB 2000:GOSUB 2000 2300 GOTO 2360 2305 REM -- Backdoor -- 2310 PRINT TAB(30);"Manual DATA mode is ON":PRINT 2320 PRINT:PRINT TAB(23);"(0) -- Data mode ON + manual input of Data" 2321 PRINT TAB(23);"(1) -- Data mode OFF" 2323 PRINT TAB(23);"(2) -- Restart program" 2330 PRINT:PRINT TAB(37);:INPUT Q 2340 IF Q=0 THEN PRINT " ON":POKE 31044,169:GOTO 2220 2345 IF Q=1 THEN PRINT " OFF":POKE 31044,0:GOTO 2360 2350 IF Q=2 THEN 2365 2360 GOTO 2330 2365 PRINT " Restart":GOSUB 2000:RUN 2360 GOSUB 2050:GOTO 2207 2400 REM -- (W)rite is disabled,if manual Data mode is active -- 2410 IF PEEK(31044)=169 THEN 2440 2420 PRINT TAB(16);"*** (W) - Write data PROM from Data line ***" 2430 RETURN 2440 PRINT TAB(16);"*** (W) - No active, manual mode is ON ! ***" 2450 RETURN 2500 REM -- (W) info -- 2502 PRINT CHR$(12) 2504 PRINT TAB(10);"To use write mode (W) you must deactivate manual"; 2506 PRINT " Data mode !":PRINT 2508 PRINT TAB(21);"/Press (S), next (I)+(1) for mode OFF and" 2510 PRINT TAB(32);"and (2) Restart/":PRINT 2515 PRINT TAB(16);"Or quite simply = End program, write POKE 31044,0" 2516 PRINT TAB(28);"and new to RUN program ..." 2520 GOSUB 2000:GOSUB 2000:GOSUB 2000:GOTO 1090 3000 REM -- Subroutine analyzer part2 -- 3001 IF IG=3 THEN 3010 3002 IF ZA=1 THEN 3010 3003 IF IG=1 THEN 5000 3005 REM -- JUMP - LINE 5095 -- 3010 T=0:Q=0:X=0:Y=0:A=0:Y=0:OK=0:ER=0 3012 PRINT CHR$(12):REM CLS 3015 PRINT TAB(27);"Igis byte to bit analyzer:" 3020 PRINT TAB(18);"Dataline: PROMdata: Dataline: PROMdata:" 3022 PRINT TAB(15);"by bit bit"; 3023 PRINT TAB(39);"by bit bit" 3025 PRINT TAB(15);"te:76543210 V: 76543210 te:76543210 V: 76543210" 3050 REM -- Table 4 byte in bit form -- 3055 GOSUB 3200:REM First 2 byte 3062 Q=Q+1:T=T+1 3064 GOSUB 3200:REM Next 2 byte 3080 Q=Q+1:IF Q=2 THEN PRINT:Q=0 3082 T=T+1:IF T=32 THEN POKE PA,0:GOTO 3100 3090 GOTO 3050 3100 IF IG=3 THEN 8210 3110 PRINT:POKE PA,0:T=0:Q=0:X=0:Y=0:A=0:Y=0:OK=0:GOTO 1830 3200 REM -- Subprogram for 2 byte to bit -- 3205 POKE PA,128:GOSUB 2050 3210 IF T<10 THEN PRINT TAB (14);" ";T; 3220 IF T>=10 THEN PRINT TAB(14);T; 3230 X=PEEK(PD+T):GOSUB 3400 3231 IF IG=3 THEN 3237 3232 X=PEEK(PD+T+50) 3233 IF PEEK(PD+T)=PEEK(PD+T+50) THEN PRINT " == "; 3234 IF PEEK(PD+T)<>PEEK(PD+T+50) THEN PRINT " <> "; 3236 GOTO 3249 3237 POKE PA,(128+T):U1=PEEK(PC):U2=PEEK(PD+T) 3238 X=PEEK(PC) 3239 IF U1=U2 THEN PRINT " == "; 3240 IF U1<>U2 THEN PRINT " <> "; 3249 GOSUB 3400 3250 RETURN 3400 REM -- Subprogram Dec2bin converter -- 3410 Y=128 3412 A=INT(X/Y):IF A=0 THEN 3416 3414 PRINT "1";:X=X-Y:GOTO 3418 3416 PRINT "0"; 3418 Y=Y/2 3420 IF INT(Y)=0 THEN 3424 3422 GOTO 3412 3424 RETURN 4000 REM -- Subroutine for computing CRC data -- 4010 L=0:FOR G=PD TO PD+31:Q=PEEK(G):L=L+Q:NEXT G:RETURN 4100 REM -- Subroutine for CRC data in line -- 4110 RESTORE:L=0:FOR G=PD TO PD+31:READ M:POKE G,M 4140 Q=PEEK(G):L=L+Q:NEXT G 4160 RETURN 4200 REM -- Hexa input data -- 4202 GOSUB 4900:DF=PD:B$="0123456789ABCDEF":N=0:S=0 4203 PRINT "Adress: data:":PRINT "(hex) (hex)" 4206 L=N AND 15:H=(N-L)/16:REM PRINT "DF";DF;" N";N 4207 PRINT" :";:PRINT MID$(B$,H+1,1)MID$(B$,L+1,1);" ";:INPUT A$ 4208 IF LEN (A$)=1 OR LEN (A$)>2 THEN GOSUB 4290:GOTO 4207 4227 IF LEFT$ (A$,1)="F" THEN S=240:GOTO 4244 4228 IF LEFT$ (A$,1)="E" THEN S=224:GOTO 4244 4229 IF LEFT$ (A$,1)="D" THEN S=208:GOTO 4244 4230 IF LEFT$ (A$,1)="C" THEN S=192:GOTO 4244 4231 IF LEFT$ (A$,1)="B" THEN S=176:GOTO 4244 4232 IF LEFT$ (A$,1)="A" THEN S=160:GOTO 4244 4233 IF LEFT$ (A$,1)="9" THEN S=144:GOTO 4244 4234 IF LEFT$ (A$,1)="8" THEN S=128:GOTO 4244 4235 IF LEFT$ (A$,1)="7" THEN S=112:GOTO 4244 4236 IF LEFT$ (A$,1)="6" THEN S=96:GOTO 4244 4237 IF LEFT$ (A$,1)="5" THEN S=80:GOTO 4244 4238 IF LEFT$ (A$,1)="4" THEN S=64:GOTO 4244 4239 IF LEFT$ (A$,1)="3" THEN S=48:GOTO 4244 4240 IF LEFT$ (A$,1)="2" THEN S=32:GOTO 4244 4241 IF LEFT$ (A$,1)="1" THEN S=16:GOTO 4244 4242 IF LEFT$ (A$,1)="0" THEN S=0:GOTO 4244 4243 GOSUB 4290:GOTO 4207 4244 IF RIGHT$ (A$,1)="F" THEN S=S+15:GOTO 4270 4245 IF RIGHT$ (A$,1)="E" THEN S=S+14:GOTO 4270 4246 IF RIGHT$ (A$,1)="D" THEN S=S+13:GOTO 4270 4247 IF RIGHT$ (A$,1)="C" THEN S=S+12:GOTO 4270 4248 IF RIGHT$ (A$,1)="B" THEN S=S+11:GOTO 4270 4249 IF RIGHT$ (A$,1)="A" THEN S=S+10:GOTO 4270 4250 IF RIGHT$ (A$,1)="9" THEN S=S+9:GOTO 4270 4251 IF RIGHT$ (A$,1)="8" THEN S=S+8:GOTO 4270 4252 IF RIGHT$ (A$,1)="7" THEN S=S+7:GOTO 4270 4253 IF RIGHT$ (A$,1)="6" THEN S=S+6:GOTO 4270 4254 IF RIGHT$ (A$,1)="5" THEN S=S+5:GOTO 4270 4255 IF RIGHT$ (A$,1)="4" THEN S=S+4:GOTO 4270 4256 IF RIGHT$ (A$,1)="3" THEN S=S+3:GOTO 4270 4257 IF RIGHT$ (A$,1)="2" THEN S=S+2:GOTO 4270 4258 IF RIGHT$ (A$,1)="1" THEN S=S+1:GOTO 4270 4259 IF RIGHT$ (A$,1)="0" THEN S=S+0:GOTO 4270 4260 GOSUB 4290:GOTO 4207 4270 POKE DF,S:N=N+1:DF=DF+1 4279 IF DF=PD+32 THEN GOSUB 8700:PRINT:GOTO 8800 4280 GOTO 4206 4290 REM -- Subroutine for information about input data -- 4291 PRINT TAB(31);" Out of range !!!":GOSUB 2010:RETURN 4300 REM -- Dec input data -- 4301 F=PD:S=0:GOSUB 4900 4302 PRINT "Adress: data:":PRINT "(dec) (dec)" 4303 IF S<10 THEN PRINT " ";S, 4304 IF S>=10 THEN PRINT S, 4305 INPUT Q: IF Q>255 THEN GOSUB 4290:GOTO 4302 4306 POKE F,Q: F=F+1:S=S+1 4307 IF F=PD+32 THEN GOSUB 8700:PRINT:GOTO 8800 4308 GOTO 4303 4900 REM -- Subroutine for input PROM DATA Name -- 4910 PRINT TAB(19);"(.....Name = lenght max.40 characters....)" 4920 PRINT TAB(3);"PROM DATA NAME:";:INPUT C$ 4930 IF LEN (C$)>40 THEN GOSUB 4290: GOTO 4910 4940 PRINT:RETURN 4950 REM -- Read PROM + Write to Data line -- 5000 PRINT:PRINT TAB(16);"Read PROM and Write to Data line ";:CRC=0 5001 GOSUB 2100 5002 R=50:IF IG=2 THEN R=0 5010 POKE PB,0:QW=0:A=0:POKE PA,128:REM PROM is energized 5030 GOSUB 2050 5035 QW=128+A 5040 POKE PA,QW:OC=PEEK(PC) 5060 POKE (PD+A+R),OC 5080 CRC=CRC+OC 5090 A=A+1 5095 IF A=32 AND IG=1 THEN GOTO 3005 5100 IF A=32 THEN GOTO 5120 5110 GOTO 5035 5120 IF CRC=0 THEN PRINT " BLANK PROM !":GOTO 5160 5130 IF CRC>0 THEN PRINT " ACTIVE PROM !" 5140 POKE PA,0: POKE PB,0:REM PROM is without power 5150 IF CRC>0 THEN GOSUB 4900:GOSUB 8700:PRINT:GOSUB 8800:END 5160 POKE PA,0: POKE PB,0:GOSUB 2000:GOTO 1090 6000 REM -- Test,read blank PROM -- 6002 PRINT:PRINT TAB(18);"Test - read blank PROM "; 6005 POKE PB,0: REM Port B=0 6010 QW=0:A=0:POKE PA,128:REM PROM is energized 6030 GOSUB 2050:REM Delay to Relay ON 6035 QW=128+A 6040 POKE PA,QW:OC=PEEK(PC) 6050 IF OC=0 THEN 6070 6060 PRINT " Not a blank PROM!":PRINT TAB(27);"Insert new blank PROM!" 6065 POKE PA,0:POKE PB,0:GOSUB 2000:GOSUB 2000:GOTO 1090 6070 A=A+1:IF A=32 THEN GOTO 6100 6090 GOTO 6035 6100 PRINT " Good - a blank PROM !":POKE PA,0:POKE PB,0 6105 IF Z=1 THEN 7020 6110 GOSUB 2000:GOTO 1090 7000 REM -- PROM WRITING -- 7002 PRINT CHR$(12):REM CLS 7005 IF PEEK(31044)=169 THEN 2400 7012 PRINT TAB(30);"Writing PROM 74188 ...":PRINT 7015 Z=1:GOTO 6000 7020 GOSUB 9000:PRINT:PRINT TAB(16);" Name Data file:";C$ 7030 GOSUB 9005:PRINT TAB(32);" CRC=";CRC 7035 IF CRC=0 THEN PRINT" No valid data !":GOSUB 2000:GOTO 1090 7042 PRINT :PRINT TAB(34);"CONTINUE Y/N";:INPUT A$ 7045 IF A$="N" THEN GOTO 1090 7050 IF A$="Y" THEN GOTO 7070 7055 GOSUB 1999:GOTO 7042 7070 QW=0:A=0 7100 RESTORE 7110 REM -- Reading Data line to program -- 7120 FOR G=PD TO PD+31:READ M:POKE G,M:NEXT G 7200 REM -- One byte to bit conversion -- 7210 POKE PA,128:POKE PB,0:GOSUB 2050:PRINT 7212 PRINT TAB(17);"Programming one byte step by step - bit to bit:" 7213 PRINT TAB(22);"(statement at the terminal in dec form)" 7214 PRINT:PRINT:PRINT TAB(8); 7225 FOR G=PD TO PD+31 7226 IF A<10 THEN PRINT " ";A; 7227 IF A>=10 AND A=<15 THEN PRINT A; 7229 IF A=15 THEN PRINT:PRINT:PRINT TAB(8); 7230 IF A>15 THEN PRINT A; 7240 K=PEEK(G) 7250 FOR F=PE TO PE+7:POKE F,0:NEXT F 7260 IF K>=128 THEN POKE (PE+7),128:K=K-128 7270 IF K>=64 THEN POKE (PE+6),64:K=K-64 7280 IF K>=32 THEN POKE (PE+5),32:K=K-32 7290 IF K>=16 THEN POKE (PE+4),16:K=K-16 7300 IF K>=8 THEN POKE (PE+3),8:K=K-8 7310 IF K>=4 THEN POKE (PE+2),4:K=K-4 7320 IF K>=2 THEN POKE (PE+1),2:K=K-2 7330 IF K>=1 THEN POKE (PE+0),1:K=K-1 7365 FOR QW=0 TO 7 7368 REM ****** - conversion byte to bit ******** 7370 S=PEEK(PE+QW) 7400 REM -- Subroutine for burning -- 7401 IF S=0 THEN 7480:REM 0=no programmming bit 7402 REM description line number: 7403 REM line 7420 - chip under voltage, relay on, waiting 7404 REM line 7420 - port A, bit7=1 7405 REM line 7430 - adress to PA + bit data to port B 7406 REM line 7430 - port A, bit7=1, relay on 7407 REM line 7440 - Ucc=5V/10.5V, CS=1 7408 REM line 7440 - port A, bit7=1, bit6=1, bit5=1,relay on 7409 REM line 7450 - programming pulse =17msec. 7410 REM line 7450 - Ucc=10.5V, CS=0, relay=on 7411 REM line 7460 - end prog.pulse 7412 REM line 7460 - Ucc=10.5V/5V, CS=1 7413 REM line 7470 - Ucc=5V, CS=0, PB=0, relay=on 7414 REM line 7470 - Ucc=0V, relay=off, waiting 7420 POKE PA,128:GOSUB 2050 7430 POKE PA,(A+128):POKE PB,S 7440 POKE PA,(A+224) 7450 POKE PA,(A+192):FOR F=0 TO 43:NEXT F 7460 POKE PA,(A+160) 7470 POKE PA,128:POKE PB,0:POKE PA,0:GOSUB 2050 7480 NEXT QW 7970 A=A+1:GOSUB 2050:NEXT G 7975 PRINT:PRINT:A=0:G=0 7980 PRINT TAB(24);"End of the round no.";Z;"of programming":Z=Z+1 7990 POKE PA,0:POKE PB,0:A=0:QW=0:GOSUB 2000 8000 REM -- VERIFYING PROM - DATA line -- 8001 RESTORE 8012 POKE PA,128:POKE PB,0:GOSUB 2050:A=0:L=0:QW=0 8013 OK=0:ER=0:PRINT CHR$(12):REM CLS 8014 PRINT TAB(29);"Verifying PROM <-> DATA:" 8015 PRINT TAB(33);"(P=Pass/E=Error)":PRINT 8018 PRINT:PRINT TAB(25);"Byte:.....1111111111222222222233" 8019 PRINT TAB(25);"01234567890123456789012345678901":PRINT 8020 FOR G=PD TO PD+31 8030 READ M:POKE G,M 8040 Q=PEEK(G):L=L+Q 8050 NEXT G 8080 A=0:FOR G=PD TO PD+31:QW=128+A 8085 POKE PA,QW:Q=PEEK(PC):R=PEEK(G) 8100 IF Q=R THEN OK=OK+1:PRINT TAB(25+A);"P";:GOTO 8104 8102 X=1:PRINT TAB(25+A);"E";:ER=ER+1 8104 A=A+1:NEXT G 8106 PRINT:PRINT TAB(26);"Pass =";OK;"byte ";"Error=";ER;"byte" 8108 POKE PA,0:OK=0:ER=0:PRINT 8121 IF Y=1 AND X=1 THEN 8200 8122 IF Y=1 AND X=2 THEN 8130 8123 IF X=1 AND VP=1 AND Y=0 THEN 8200 8125 IF L=0 THEN PRINT" Blank PROM !!!":POKE PA,0:GOSUB 2000:GOTO 1090 8126 IF X=1 THEN 8150 8127 IF X=1 THEN Y=0:POKE PA,0:GOSUB 2000:X=X+1 8128 IF X=2 THEN Y=1:POKE PA,0:GOSUB 2000:GOTO 7070 8130 POKE PA,0:PRINT:PRINT TAB(33);"Verification O.K. !" 8140 GOSUB 2000:GOSUB 2000:GOTO 1090 8150 PRINT TAB (23);"New attempt to burn no.";Z; 8160 PRINT ", please wait.":POKE PA,0:GOTO 8127 8200 POKE PA,0:GOSUB 2000:IG=3:GOTO 3000 8210 PRINT " Sorry, bad PROM ..."; 8220 IG=0:POKE PA,0:T=0:Q=0:X=0:Y=0:A=0:Y=0:OK=0:END 8700 PRINT:PRINT"*** Subroutine PROM 74188 line data generator ****" 8702 PRINT 8711 PRINT "9000 C$=";CHR$(34);C$;CHR$(34);":ID=32:RETURN" 8712 PRINT "9001 DATA";:FOR G=PD TO (PD+6):PRINT PEEK(G);","; 8713 NEXT G:PRINT PEEK(PD+7) 8714 PRINT "9002 DATA";:FOR G=(PD+8) TO (PD+14):PRINT PEEK(G);","; 8715 NEXT G:PRINT PEEK(PD+15) 8716 PRINT "9003 DATA";:FOR G=(PD+16) TO (PD+22):PRINT PEEK(G);","; 8717 NEXT G:PRINT PEEK(PD+23) 8718 PRINT "9004 DATA";:FOR G=(PD+24) TO (PD+30):PRINT PEEK(G);","; 8719 NEXT G:PRINT PEEK(PD+31) 8720 GOSUB 4000 8730 PRINT "9005 CRC=";L;":RETURN";":REM CRC in (dec) form !":PRINT 8735 PRINT"***************************************************" 8740 RETURN 8750 REM -- MENU -- 8760 PRINT CHR$(12):REM CLS 8761 PRINT TAB(16);"******* 74188 PROM programmer,Igi(c)2021 *******" 8762 PRINT TAB(16);"******* - 02.02.2021,SBC6502 - 4.00MHz - *******" 8763 GOSUB 8790 8764 PRINT TAB(16);"***** (D) - Dec input data to Data line *****" 8765 PRINT TAB(16);"**** (H) - Hex input data to Data line ****" 8766 PRINT TAB(16);"*** (R) - Read PROM + generate Data line ***" 8767 PRINT TAB(16);"** (T) - Test blank PROM **" 8768 PRINT TAB(16);"** (V) - Verify data PROM - Data line **" 8769 GOSUB 2400 8770 PRINT TAB(16);"**** (S) - Special mode,reprogram.PROM ****" 8771 PRINT TAB(16);"***** (Q) - Quit program *****" 8772 GOSUB 8790 8773 PRINT TAB(16);"******* ----- Data line file name: ----- **(I)**" 8774 GOSUB 9000:PRINT TAB(16);"** ";C$;TAB(62);"**" 8775 PRINT TAB(16);"****----------------------------------------****" 8776 GOSUB 4100:IF L=0 THEN GOTO 8780 8777 GOSUB 9005:IF L<>CRC THEN GOTO 8900 8778 PRINT TAB(16);"** Valid data in memory ! CRC=";CRC;TAB(62)"**" 8779 GOTO 8781 8780 PRINT TAB(16);"** No valid data in memory ! CRC=";CRC;TAB(62)"**" 8781 PRINT TAB(16);"************************************************" 8782 RETURN 8790 REM -- Subprogram for Menu -- 8792 PRINT TAB(16);"******";TAB(58);"******" 8794 RETURN 8800 REM -- Info for (D),(H),(R) -- 8801 PRINT TAB(6);"Save this datalines (9000-9005) in the" 8802 PRINT TAB(13);"specified line positions," 8803 PRINT TAB(10);"and then run the program again !":PRINT 8804 GOSUB 8735 8805 PRINT:PRINT TAB(19);"End program ...";:END 8900 REM -- Verify problem -- 8901 PRINT:PRINT " Problem ...":PRINT " Bad verification result," 8904 PRINT " difference in:":PRINT " Computer Data" 8905 PRINT TAB(3);"data line" 8906 PRINT TAB(3);"CRC : < > CRC :":PRINT TAB(2);"=";L; 8907 PRINT TAB(15);"=";CRC:END 8990 REM -- PROM 74188 data lines -- 9000 C$=" Test file, all DATA bytes =0":ID=32:RETURN 9001 DATA 0,0,0,0,0,0,0,0 9002 DATA 0,0,0,0,0,0,0,0 9003 DATA 0,0,0,0,0,0,0,0 9004 DATA 0,0,0,0,0,0,0,0 9005 CRC=0:RETURN:REM CRC in dec form ! 9006 REM ********************* End *************************