image of READY prompt

Wang2200.org

Listing of file='SUPERZAP' on disk='vmedia/mvp-diag-2.6.2.wvd.zip'

# Sector 1954, program filename = 'SUPERZAP'
0010 REM % FILEZAP
0020 REM          Program name = SUPERZAP
0030 REM               Version = 3.9
0040 REM Date of last revision = 24 FEB 81
0050 REM                Author = Steve McGarry
0060 REM ---------------------------------------------
0070 REM               Version = 8434
0080 REM Date of last revision = 26 MAR 84
0090 REM                Author = Paul J. Hossfeld
0100 REM
0110 REM  Added use of curser move arrows and fixed SF'23
0120 REM ---------------------------------------------
0130 REM %
0140 PRINT HEX(0202000F)
0150 DIM A$(16)16,B,B1,B0$1,D$3,H$2,I$4,I1$4,K$1,N$5,N1$2,S$5,S0$1,X$1,X(3)
   : PRINT HEX(0306);BOX(3,79);BOX(1,16),BOX(1,29);BOX(1,50);BOX(1,61);BOX(1,7
     9)
   : PRINT HEX(0A0A0A);TAB(7);BOX(16,47);AT(3,0);BOX(16,54);BOX(16,71);BOX(21,
     79);BOX(16,79)
0160 DATA LOAD DA T(19583)D$
   : ERRORD$="310"
0170 PRINT AT(1,29);BOX(2,21);  AT(1,32) ;"WANG LABS, INC.";AT(2,30);"SUPERZAP
      - Rev. 8434"
   : GOSUB 210
   : GOTO 190
0180 E=ERR
   : IF E>0THEN 200
0190 F,R=0
   : GOTO 330
0200 PRINT AT(0,30,31);HEX(0E07);"ERROR DURING READ"
   : GOTO 330
0210 PRINT AT(19,1,);"'0 = Change sector";TAB(22);"'12 /NEXT SCRN = Next secto
     r";TAB(55);"  '23 = File limits"
   : PRINT " '1 = Change device";TAB(22);"'13 /PREV SCRN = Previous sector"; T
     AB(55);" EDIT = Edit mode"
0220 PRINT " '2 = Decimal to hex"
   : PRINT " '3 = Hex to decimal"
   : PRINT TAB(57); "'31 = Exit program";
   : M=1
   : RETURN
0230 PRINT AT(19,1,);"'0 = Switch Hex/ASCII";TAB(25);" '8 = Fill sector";TAB(5
     3); "'15 = Recall original data"
   : PRINT " '2 = Decimal to hex"; TAB(25);" '5 /Dn arrow = Down";TAB(53);"'16
      = Save changes"
0240 PRINT " '3 = Hex to decimal";TAB(25); " '6 /Up arrow = Up"; TAB(53);"'23
     = File limits"
0250 PRINT " '4 = End of sector";TAB(25);"'12 /Right arrow = Right"
0260 PRINT " '7 = Start of sector";TAB(25);"'13 /Left arrow = Left"; TAB(52);"
     EDIT = Display mode";
   : M=2
   : RETURN
0270 %KEYIN X$,500,500
0280 X$=" "
   : KEYIN X$,,300
   : $BREAK255
   : GOTO 280
0290 REM % ---------- DISPLAY ----------
0300 IF X$=HEX(00)THEN 310
   : IF X$=HEX(01)THEN 330
   : IF X$=HEX(02)THEN GOSUB '2
   : IF X$=HEX(03)THEN GOSUB '3
   : IF X$=HEX(1F)THEN 9000
   : IF X$=HEX(F0)THEN 410
   : IF X$=HEX(0C) OR X$=HEX(43) OR X$=HEX(53) THEN 340
   : IF X$=HEX(17) THEN GOSUB '23
   : IF X$<>HEX(0D) AND X$<>HEX(42) AND X$<>HEX(52) THEN 270
   : R=R-2
   : IF R<0THEN R=0
   : GOTO 340
0310 X$=" "
0320 PRINT AT(0,0,16);HEX(0E);
   : CONVERT FTO S$,(#####)
   : P=POS(S$<>"0")
   : IF P=0THEN S$="0"
   : ELSE S$=STR(S$,P)
   : LINPUT " Sector ?",?S$
   : IF NUM(S$)<LEN(S$)THEN 320
   : CONVERT S$TO R
   : GOTO 340
0330 PRINT AT(0,17);HEX(0E);
   : LINPUT "Device ?",?D$
   : R=0
   : PRINT AT(0,17);"Device : ";D$
   : GOTO 320
0340 PRINT HEX(06);AT(0,0,16);" Sector :";R;TAB(17);"Device : ";D$;TAB(30);HEX
     (0E);"Loading          "
0350 SELECT #8<D$>
   : F=R
   : DATA LOAD BA T#8,(R,R) A$()
   : ERRORGOTO 180
0360 PRINT AT(0,30,31);HEX(0E);"Printing"
   : PRINT HEX(0A0A)
0370 FOR J=1TO 16
   : PRINT HEX(2020202020200E820F);
   : FOR K=1TO 15STEP 2
   : PRINT TAB((K-1)*3+8);HEXOF(STR(A$(J),K,2));
   : NEXT K
   : B$=A$(J)
   : FOR L=1TO 16
   : IF STR(B$,L,1)<HEX(20)OR STR(B$,L,1)=HEX(80)THEN STR(B$,L,1)="."
   : NEXT L
   : PRINT TAB(55);STR(B$,,16)
   : PRINT HEX(0C);"       "
   : NEXT J
0380 S=0
   : IF M=2THEN 390
   : PRINT AT(0,30,31);HEX(0E);"Display mode";HEX(0F06)
   : S=0
   : GOTO 270
0390 IF Q=1THEN 420
   : GOTO 710
0400 REM % ---------- EDIT ----------
0410 GOSUB 230
   : Q,Y,X=1
0420 B=0
   : GOSUB 690
0430 IF S<>1THEN PRINT HEX(06);AT(0,30,21);HEX(0E);"Hex edit mode"
   : S=1
   : K$=" "
   : D1,D2=0
0440 PRINT AT(0,51,10);"Byte :";(Y-1)*16+X;AT(Y+2,T+B);HEX(05);
0450 KEYIN K$,460,500
   : GOTO 450
0460 PRINT HEX(06);
   : IF K$<"0"OR K$>"F"THEN 430
   : IF K$>"9"AND K$<"A"THEN 430
0470 STR(H$,B+1,1)=K$
   : HEXPACK STR(A$(Y),X,1)FROMH$
   : IF B=1THEN 480
   : B=1
   : GOTO 670
0480 B=0
   : IF X=16THEN 490
   : D2=X+1
   : GOTO 670
0490 D2=1
   : IF Y<16THEN D1=Y+1
   : ELSE D1=1
   : GOTO 670
0500 PRINT HEX(06);
   : IF K$=HEX(05) OR K$=HEX(45) OR K$=HEX(55) AND Y<16THEN D1=Y+1
   : ELSE IF K$=HEX(05) OR K$=HEX(45) OR K$=HEX(55) AND Y=16THEN D1=1
   : IF K$=HEX(06) OR K$=HEX(46) OR K$=HEX(56) AND Y>1THEN D1=Y-1
   : ELSE IF K$=HEX(06) OR K$=HEX(46) OR K$=HEX(56) AND Y=1THEN D1=16
   : IF K$=HEX(0C) OR K$=HEX(4C) OR K$=HEX(5C) AND X<16THEN D2=X+1
0510 ELSE IF K$=HEX(0C) OR K$=HEX(4C) OR K$=HEX(5C) AND X=16THEN D2=1
   : IF K$=HEX(0D) OR K$=HEX(4D) OR K$=HEX(5D) AND X>1THEN D2=X-1
   : ELSE IF K$=HEX(0D) OR K$=HEX(4D) OR K$=HEX(5D) AND X=1THEN D2=16
   : IF K$=HEX(04)THEN D1,D2=16
   : IF K$=HEX(07)THEN D1,D2=1
0520 PRINT HEX(06);
   : IF K$=HEX(05)OR K$=HEX(45) OR K$=HEX(55) AND Y<16THEN D1=Y+1
   : ELSE IF K$=HEX(05) OR K$=HEX(45) OR K$=HEX(55) AND Y=16THEN D1=1
   : IF K$=HEX(06) OR K$=HEX(46) OR K$=HEX(56) AND Y>1THEN D1=Y-1
   : ELSE IF K$=HEX(06) OR K$=HEX(46) OR K$=HEX(56)  AND Y=1THEN D1=16
0530 IF K$=HEX(0C) OR K$=HEX(4C) OR K$=HEX(5C) AND X<16THEN D2=X+1
   : ELSE IF K$=HEX(0C) OR K$=HEX(4C) OR K$=HEX(5C) AND X=16THEN D2=1
   : IF K$=HEX(0D) OR K$=HEX(4D) OR K$=HEX(5D) AND X>1THEN D2=X-1
   : ELSE IF K$=HEX(0D) OR K$=HEX(4D) OR K$=HEX(5D) AND X=1THEN D2=16
   : IF K$=HEX(04)THEN D1,D2=16
   : IF K$=HEX(07)THEN D1,D2=1
0540 IF K$<>HEX(F0)THEN 550
   : X$=HEX(0D)
   : GOSUB 700
   : GOSUB 210
   : R=F
   : GOTO 340
0550 IF K$=HEX(17) THEN GOSUB '23
   : IF K$=HEX(03) THEN GOSUB '3
   : IF K$=HEX(02) THEN GOSUB '2
   : IF K$<>HEX(0F)THEN 560
   : R=F
   : GOTO 340
0560 IF K$<>HEX(10)THEN 600
0570 S0$="N"
   : GOSUB 700
   : PRINT AT(0,30,31);HEX(0E07);"SAVE THIS SECTOR ?";
   : LINPUT S0$
   : S=0
   : IF S0$="Y"THEN 580
   : IF S0$="N"THEN 390
   : GOTO 570
0580 DATA SAVE BA T#8,(F)A$()
   : ERRORPRINT AT(0,30,21);HEX(0E07);"ERROR DURING WRITE"
   : GOSUB 690
   : IF Q=1THEN 440
   : GOTO 730
0590 M=1
   : GOSUB 700
   : GOSUB 210
   : GOTO 380
0600 IF K$<>HEX(00)THEN 610
   : IF Q=1THEN Q=2
   : ELSE Q=1
   : GOTO 390
0610 IF K$<>HEX(08)THEN 660
   : GOSUB 700
0620 IF Q=1THEN 640
   : PRINT AT(0,30,31);HEX(0E);"Fill with byte =";
   : H$="X"
   : LINPUT -STR(H$,1,1)
   : F9=0
   : PRINT HEX(06);
   : IF STR(H$,1,1)>=" "AND STR(H$,1,1)<="z"THEN GOTO 630
   : PRINT HEX(07);
   : GOTO 620
0630 A$()=ALL(H$)
   : PRINT AT(0,30,31);HEX(0E);"Filling"
   : PRINT HEX(0A0A)
   : GOTO 370
0640 PRINT AT(00,30,31); HEX(0E);"Fill with byte =";
   : H$="00"
   : LINPUT -H$
   : F9=0
   : PRINT HEX(06);
   : IF STR(H$,1,1)<"0"OR STR(H$,1,1)>"9"AND STR(H$,1,1)<"A"OR STR(H$,1,1)>"F"
     THEN F9=1
   : IF STR(H$,2,1)<"0"OR STR(H$,2,1)>"9"AND STR(H$,2,1)<"A"OR STR(H$,2,1)>"F"
     THEN F9=1
   : IF F9=0THEN 650
   : PRINT HEX(07);
   : GOTO 640
0650 PRINT AT(0,51,10)
   : HEXPACKB0$FROMH$
   : A$()=ALL(B0$)
   : PRINT AT(0,30,31);HEX(0E);"Filling"
   : PRINT HEX(0A0A)
   : GOTO 370
0660 IF D1>0OR D2>0THEN B=0
0670 GOSUB 700
   : IF D1>0THEN Y=D1
   : IF D2>0THEN X=D2
   : GOSUB 690
0680 IF Q=1THEN 430
   : GOTO 720
0690 T=(X-1)*3+8
   : IF MOD(X,2)=0THEN T=T-1
   : STR(B$,1,1)=STR(A$(Y),X,1)
   : HEXUNPACK STR(B$,1,1) TO H$
   : IF B$<HEX(20)OR B$=HEX(80)THEN B$="."
   : PRINT HEX(0E);AT(Y+2,T);H$;AT(Y+2,54+X);STR(B$,1,1)
   : RETURN
0700 STR(B$,1,1)=STR(A$(Y),X,1)
   : IF B$<HEX(20)OR B$=HEX(80)THEN B$="."
   : PRINT HEX(0F);AT(Y+2,T);H$;AT(Y+2,54+X);STR(B$,1,1)
   : RETURN
0710 GOSUB 690
0720 IF S<>2THEN PRINT HEX(06);AT(0,30,21);HEX(0E);"ASCII edit mode"
   : S=2
   : K$=" "
   : D1,D2=0
   : Q=2
0730 PRINT AT(0,51,10);"Byte :";(Y-1)*16+X;AT(Y+2,54+X);HEX(05);
0740 KEYIN K$,750,520
   : GOTO 740
0750 PRINT HEX(06);
   : IF K$>=" "AND K$<="z"THEN 760
   : PRINT HEX(05);
   : GOTO 740
0760 STR(A$(Y),X,1)=K$
   : HEXUNPACKSTR(A$(Y),X,1)TO H$
   : IF X=16THEN 770
   : D2=X+1
   : GOTO 670
0770 D2=1
   : IF Y<16THEN D1=Y+1
   : ELSE D1=1
   : GOTO 670
0780 DEFFN'23
   : REM % LIMITS
   : PRINT AT(01,29); BOX(-2,0);AT(01,50); BOX(-2,-0) ; AT(01,00,159);BOX(2,21
     );HEX(0E);
   : LINPUT " Filename :",STR(F$,,8)
   : PRINT AT(01,01); HEX(0F); "Filename : ";STR(F$,,8)
   : PRINT HEX(0E);
   : LINPUT " Device   :",D$
   : PRINT HEX(060F); AT(02,01); "Device   : ";D$
0790 SELECT #14<D$>
   : LIMITS T#14,F$,B1,E,U,S
   : ERRORE=ERR
   : PRINT HEX(0E07); AT(02,15,14);"ERROR I-";E;HEX(0F);
   : RETURN
0795 S=((E-B1)+1)-U
0800 PRINT AT(01,00);HEX(06) ;BOX(2,56) ; AT(01,22); " start sector"; B1; TAB(
     45); "used"; U; AT(02,22);"   end sector"; E; TAB(45); "free"; S
0810 RETURN
1000 DEFFN'3
   : REM % HEX TO DECMAL CONVERSION
   : I$="    "
   : PRINT AT(0,62,17);HEX(0E);"Hex =";
   : LINPUT -I$
   : FOR L9=1TO 4
   : IF STR(I$,L9,1)=" "THEN 1010
   : IF STR(I$,L9,1)<"0"OR STR(I$,L9,1)>"F"THEN 1000
   : IF STR(I$,L9,1)>"9"AND STR(I$,L9,1)<"A"THEN 1000
1010 NEXT L9
   : MAT COPY -STR(I$,1,LEN(I$)) TO -I$
   : FOR L9=1 TO 4
   : IF STR(I$,L9,1)=" " THEN STR(I$,L9,1)="0"
   : NEXT L9
   : PRINT AT(0,62);HEX(0F);I$;" HEX =";
   : HEXPACKI$FROMI$
   : I=VAL(I$,2)
   : PRINT I;HEX(06);TAB(79)
   : RETURN
1020 DEFFN'2
   : REM % DECIMAL TO HEX CONVERT
   : N$="     "
1030 PRINT AT(0,62,17);HEX(0E);
1040 LINPUT "Decimal =" -N$
   : ERRORE=ERR
   : GOTO 1030
1050 CONVERT N$ TO N
   : ERRORE=ERR
   : N=0
1060 IF N> 65535 THEN 1030
   : N1$ = BIN(N,2)
   : ERRORE=ERR
   : GOTO 1030
1070 PRINT AT(0,62,17);HEX(060F);
   : HEXPRINT N1$;
1080 N1=VAL(N1$,2)
1090 PRINT " HEX ="; N1
1100 RETURN
9000 DEFFN'31
   : PRINT HEX(0306);AT(11,26);"EXITING SUPERZAP"
   : LOAD T"@MENU"
9010 DEFFN'15
   : SCRATCH T"SUPERZAP"
   : SAVE T()"SUPERZAP"
   : STOP "- PROGRAM UPDATED"