1'Remember SUPERZAP for TRS80 Mod I? 2'This program, although not as fancy, 3'will allow you to look at blocks of 4'RAM or ROM and ZAP values into RAM a 5'byte at a time. It is in basic (slow) 6'but effective for patching ML pgms, 7'or making minor changes in labels, 8'jumps or whatever, AND you see the 9'results in both HEX and ASCII before 10'and after the change. Note that you 11'display HEX and ASCII, or ASCII only 12'but modifications can only be made 13'from the HEX display. It is user- 14'friendly, thus the lack of detailed 15'instructions. It is fairly crash 16'proof and safe--POKES are not made 17'until you answer Y>es. Until then, 18'only the screen is updated. RAM is 19'untouched. Written on a 32K MOD100 20'it should work on 24K or less. The 21'range of addresses (B) in lines 120/ 22'180 may have to be modified to skip 23'empty ram. I guess it could be fixed 24'for MOD200. Four MOD100 calls are: 25' 17001 and 17006-reverse/reg video 26' 17020-position cursor-H=col,L=row 27' 4811-wait for keyboard input 99 CLS:GOSUB1000 100 PRINT@85,"ENTER STARTING ADDRESS," 110 PRINT@125,"(0 TO 65535): ";:INPUTB 120 IFB>65535ORB<0THENCLS:PRINT@42,"VALUE OUT OF RANGE....TRY AGAIN":GOTO100 130 CLS:PRINT@47,"STARTING ADDRESS IS ";B 140 PRINT@82,">>SELECT DISPLAY OPTION:" 150 PRINT@130,"1> HEX AND ASCII" 160 PRINT@170,"2> ASCII ONLY" 165 PRINT@210,"Q> QUIT (MENU) 167 PRINT@250,"A> NEW ADDRESS 170 G$="":G$=INKEY$:IFG$=""GOTO170 180 IFG$="1"THENGOSUB1100ELSEIFG$="2"THENGOSUB1150ELSEIFG$="Q"ORG$="q"THENMENUELSEIFG$="A"ORG$="a"THENRUNELSEGOTO170 190 CLS:PRINTT$ 195 C=B+59:IFC>65535THENC=65535 197 OC=B 200 M$="":L1$="":L2$="" 205 IFG$="2"GOTO500 220 GOSUB1200 225 FORZ=BTO(B+9) 230 X=PEEK(Z) 240 GOSUB1300:GOSUB1400 250 L1$=L1$+H$(F1)+H$(F2) 260 L2$=L2$+M$ 270 IFZ=CTHENZ=B+9 280 NEXTZ 290 GOSUB1600 300 PRINTAD$+" "+L1$+" "+L2$ 310 IFZ=>CTHENGOTO1500ELSEB=B+10:GOTO200 500 C=B+179:IFC>65535THENC=65535 510 M$="":L2$="" 515 GOSUB1200 525 FORZ=BTO(B+29) 527 IFZ=65536THENZ=B+29:GOTO580 530 X=PEEK(Z) 540 GOSUB1400 560 L2$=L2$+M$ 570 IFZ=CTHENZ=B+29 580 NEXTZ 590 GOSUB1650 600 PRINTAD$+" "+L2$ 610 IFZ=>CTHENGOTO1500ELSEB=B+30:GOTO510 1000 DIMH$(16):'WRITE HEX TABLE 1010 FORX=0TO15:READH$(X):NEXTX 1020 DATA 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 1030 RETURN 1100 TS$="" 1110 FORX=0TO2:TS$=TS$+CHR$(153)+" ":NEXTX 1120 T$="ADRS "+TS$+"H E X # "+TS$+" "+STRING$(3,153)+"ASCII"+STRING$(2,153) 1140 RETURN 1150 TS$=CHR$(153)+CHR$(155) 1155 GOSUB1200:N=VAL(RIGHT$(AD$,1)) 1160 T0$=TS$+"0 ":T5$=TS$+"5 " 1165 IFN=0ORN>5THENN=N-5:NN$=T0$:T0$=T5$:T5$=NN$ 1170 T$="ADRS " 1175 IFN>0THENI=5-N:T$=T$+STRING$(I,32) 1180 T$=T$+T5$+T0$+T5$+T0$+T5$+T0$ 1185 T$=LEFT$(T$,39) 1190 RETURN 1200 BD$=STR$(B):Y=LEN(BD$)-1 1210 IFY<5THENAD$=STRING$(5-Y,48)+RIGHT$(BD$,Y)ELSEAD$=RIGHT$(BD$,Y) 1220 RETURN 1300 F1=INT(X/16) 1310 F2=INT(((X/16)-F1)*16) 1320 RETURN 1400 IFX<33ORX=126ORX=127ORX=224THENX=46 1410 M$=CHR$(X) 1420 RETURN 1500 A$="+>FWD->REV E>XIT 1>HEX 2>ASC Q>UIT C>HG" 1505 IFG$="1"AND(B+9)>32767THENPRINT@280,A$;ELSEPRINT@280,LEFT$(A$,35);" "; 1510 E$="":E$=INKEY$:IFE$=""GOTO1510 1520 IFE$<>"+"ANDE$<>"="THENGOTO1530 1522 IFG$="1"THENB=B+10ELSEB=B+30 1523 IFB>65535THENB=OC 1524 GOTO180 1530 IFG$="1"THENB=OC+50ELSEB=OC+150 1531 IFE$<>"-"ANDE$<>"_"THENGOTO1540 1532 IFG$="1"THENB=B-110ELSEB=B-330 1534 IFB<0THENB=0 1536 GOTO180 1540 IFE$="E"ORE$="e"THENRUN 1550 IFE$="Q"ORE$="q"THENG$="Q":GOTO180 1560 IFG$="1"ANDE$="C"ORE$="c"THENGOTO2000 1565 IFG$="1"THENB=B-50ELSEB=B-150 1570 IFE$="!"ORE$="1"THENG$="1":GOTO180 1575 IFE$="@"ORE$="2"THENG$="2":GOTO180 1580 GOTO1510 1600 IFG$="2"GOTO1650 1610 R=LEN(L1$):IFR=20GOTO1630 1620 L1$=L1$+STRING$(20-R,32) 1630 R=LEN(L2$):IFR=10THENRETURN 1640 L2$=L2$+STRING$(10-R,32) 1645 RETURN 1650 R=LEN(L2$):IFR=30THENRETURN 1660 L2$=L2$+STRING$(30-R,32) 1670 RETURN 2000 B=OC+50:IF(B+9)<32768THENGOTO1510 2005 X=8:Y=2:PC=OC:E$=STRING$(39,32) 2010 PS=65071:O1=PEEK(PS):O2=PEEK(PS+1) 2020 PRINT@280," M>ODIFY E>XIT OR MOVE CUR WITH ARROWS "; 2025 GOSUB2350 2027 IFPC<32768THENZ=28:GOSUB2210:GOTO2027 2030 GOSUB2300 2040 IFASC(I$)<32ANDASC(I$)>27THENGOSUB2200 2050 IFI$="M"THENGOSUB2400 2055 IFI$="E"THENGOSUB2380:GOTO1500 2057 IFI$="Q"THENMENU 2060 GOTO2020 2200 Z=ASC(I$):IFZ=29AND(PC-1)<32768THENGOTO2030 2201 IFZ=30AND(PC-10)<32768THENGOTO2030 2204 IFZ=28ANDPC=65535THENGOTO2030 2206 IFZ=31ANDPC>65525THENGOTO2030 2210 IFZ=28ANDX<26THENGOSUB2380:X=X+2:PC=PC+1:PS=PS+2:GOSUB2260:GOSUB2350:RETURN 2215 IFZ=28ANDX=26THENGOSUB2380:X=8:PC=PC-9:PS=PS-18:GOSUB2260:Z=31 2220 IFZ=29ANDX>8THENGOSUB2380:X=X-2:PC=PC-1:PS=PS-2:GOSUB2260:GOSUB2350:RETURN 2225 IFZ=29ANDX=8THENGOSUB2380:X=26:PC=PC+9:PS=PS+18:GOSUB2260:Z=30 2230 IFZ=30ANDY>2THENGOSUB2380:Y=Y-1:PC=PC-10:PS=PS-40:GOSUB2260:GOSUB2350:RETURN 2240 IFZ=31ANDY<7THENGOSUB2380:Y=Y+1:PC=PC+10:PS=PS+40:GOSUB2260:GOSUB2350:RETURN 2250 RETURN 2260 O1=PEEK(PS):O2=PEEK(PS+1):RETURN 2300 I$="":I$=INKEY$:IFI$=""GOTO2300 2310 IFASC(I$)>96THENI$=CHR$(ASC(I$)-32) 2312 IFASC(I$)<28THENGOTO2300 2320 RETURN 2350 HL=256*X+Y 2360 CALL17001:CALL17020,1,HL:PRINTCHR$(O1);CHR$(O2);:CALL17006:CALL17020,1,264 2370 RETURN 2380 HL=256*X+Y 2390 CALL17020,1,HL:PRINTCHR$(O1);CHR$(O2);:CALL17020,1,264 2395 RETURN 2400 C$="":PRINT@280,E$; 2410 PRINT@280," XXH>EX OR XXXD>EC TO CHG ";CHR$(O1);CHR$(O2);" OR Q>UIT"; 2420 GOSUB2300:C$=C$+I$:PRINT@280,E$;:PRINT@280," XXH OR XXXD TO CHG ";CHR$(O1);CHR$(O2);" TO ";C$;" Q>UIT"; 2430 IFI$="H"ORI$="D"THENGOTO2500 2440 IFI$="Q"THENGOTO2020:REMI$="E":RETURN 2450 GOTO2420 2500 IFLEN(C$)<3THENGOTO2420 2510 IFRIGHT$(C$,1)="H"THENGOSUB2700ELSEGOSUB2800 2520 IFL3=999THENRETURN 2530 L6=O1:L7=O2:O1=L4:O2=L5:GOSUB2350:O1=L6:O2=L7 2540 PA=69+(X-8)/2+(Y-2)*40 2542 PR=65024+PA:L0=PEEK(PR) 2545 PP=B+(X-8)/2+((Y-7)*10) 2550 Z=L3:IFZ<33ORZ=126ORZ=127ORZ=224THENZ=46 2552 PRINT@PA,CHR$(Z); 2560 PRINT@280,E$;:PRINT@280," CHANGE ";PP;" TO ";C$;" Y>ES OR N>O?";:GOSUB2300:IFI$="Y"THENGOTO2600 2570 L3=L0:PRINT@PA,CHR$(L3);:I$="":RETURN 2600 O1=L4:O2=L5:POKEPP,L3:I$="":RETURN 2700 IFLEN(C$)<>3GOTO2790 2710 L4=ASC(LEFT$(C$,1)):L5=ASC(MID$(C$,2,1)) 2720 IFL4<48ORL4>70GOTO2790ELSEIFL5<48ORL5>70GOTO2790 2730 IFL4>57ANDL4<65GOTO2790ELSEIFL5>57ANDL5<65GOTO2790 2740 IFL4<58THENL8=L4-48ELSEL8=L4-55 2750 IFL5<58THENL9=L5-48ELSEL9=L5-55 2760 L3=(L8*16)+L9:RETURN 2790 PRINT@280,E$;:PRINT@280," HEX VALUE OF ";C$;" IS OUT OF RANGE!";:FORZ=1TO500:NEXTZ:GOTO2830 2800 L3=VAL(C$) 2805 FORZ=1TO(LEN(C$)-1):IFASC(MID$(C$,Z,1))>57THENGOTO2828ELSENEXTZ 2810 IFL3>255THENPRINT@280,E$;:PRINT@280," DECIMAL VALUE ";L3;" OUT OF RANGE!";:FORZ=1TO500:NEXTZ:GOTO2830 2820 L7=X:X=L3:GOSUB1300:X=L7:L4=ASC(H$(F1)):L5=ASC(H$(F2)):RETURN 2828 PRINT@280,E$;:PRINT@280," DECIMAL ";C$;" IS INVALID--TRY AGAIN";:FORZ=1TO500:NEXTZ 2830 L3=999:I$="":RETURN