image of READY prompt

Wang2200.org

Listing of file='MECI' on disk='vmedia/mvp-diag-3.5.wvd.zip'

# Sector 448, program filename = 'MECI'
0010 REM %^MECI -- MEMORY ERROR CHIP IDENTIFIER
   : REM 06/12/79
   : REM B. Patterson
0020 REM %REVISIONS (9/22/78).............................
   : REM 1. Bank logic added for data memory (for 256K MVP).
   : REM 2. 16K RAM logic added.
0030 REM %REVISIONS (10/08/78).............................
   : REM 1. PECM corrected to display XOR of data with expected data.
0040 REM %REVISIONS (06/12/79).............................
   : REM 1. 32K 7588 logic added.
0045 REM %REVISIONS (04/01/84).............................
   : REM 1. 512K data memory logic added
   : REM 2. 64K control memory logic added
   : REM 3. graphics display added
   : REM 4. stoped error reverse on odd address -- line 800
0050 REM %^HARDWARE REQUIRED..............................
   : REM 1. 2200VP or MVP with 16K memory.
   : REM 2. 24 x 80 CRT.
0060 REM %^INSTRUCTIONS......................................
   : REM 1. Edit system error --     ('RETURN' must be keyed after each field)
   : REM      a. error type (eg, PEDM).
   : REM      b. error address.
   : REM      c. error data (if any).
0070 REM 2. Specify disk file to compare PECM data against (if desired).
   : REM 3. Questionable locations on memory board will be displayed.
   : REM 4. Press any key to clear display & enter next error.
   : REM    Or press any SF key to enter different memory configuration.
0080 REM 5. Notice that board 1 is located closer to CPU.
   : REM    Board 2 is closer to power supply.
0090 REM %^VARIABLES..........................
   : REM A,L1,L$,T$ -- work variables
0100 REM A$,A9$ -- system error address (binary)
   : REM A2$ -- system error 2nd address
   : REM A1$  -- system error address (ASCII)
   : REM B   -- board# (1 or 2)
   : REM C$(I) -- "E" if chip is bad (corresponds to 1's in X$)
0110 REM B,B2 -- board# (1 or 2)
   : REM C$(I) -- "E" if chip is bad (corresponds to 1's in X$)
   : REM P$,P9$ -- data memory page (0,4,8,C)
   : REM P2$ -- data memory page (2nd address)
0120 REM S$ -- data memory size
   : REM M$ -- control memory size
   : REM S$(I),M$(I) -- board I type
   : REM R$,R1$ -- chip row order
   : REM Q,Q2,Q$ -- chip row
0130 REM D$  -- system error data (binary)
   : REM D1$  -- sytem error data (ASCII)
   : REM E   -- error type (1=BECM,2=PECM,3=VECM,4=BEDM,5=PEDM,6=REDM,7=VEDM)
   : REM E$   -- error mnemonic (eg, PEDM)
0140 REM F$   -- disk file name
   : REM F1$  -- disk address
   : REM F1,F2,F3 -- start,end,current file address
   : REM F4  -- file status
   : REM F2$  -- record type
   : REM F3$  -- record data address & count
   : REM F$()  -- record data
0150 REM F5$ -- instruction from file
   : REM F6$  -- found/not found flag
   : REM I,I1,I2   -- counter
   : REM T   -- tab value
   : REM L   -- chip location on board
   : REM X  -- number of chip rows on board
   : REM X$  -- bad data bits are 1's
   : REM Z$,Z1$,Z2$,Z3$ -- board display
   : REM
0160 DIM A1$7,A$2,A2$2,D1$6,D$3,F$8,F1$4,F2$2,F3$3,F$(4)60,F4$2,F5$3,G$,I1,I2,
     L$2,C$3,C$(24)1,Z$80,Z1$80,Z2$100,Z3$80,Z4$80,E$4,X,X$3,T$80,P$1,P2$1,S$(
     4),R$8,Q$1,R1$6,M$(2)
0170 G$="Y"
   : PRINT HEX(03);AT(12,25);
   : LINPUT "Do you want graphic displays" G$
0180 DEFFN'31
   : RETURN  CLEAR  ALL
   : F$="@@"
   : F1$="/310"
   : Z$=ALL("-")
   : Z2$="-!"&HEX(080A)&"!--------------------!"&HEX(080C)&"!------"&STR(Z2$,2
     ,34)&STR(Z2$,2,29)
   : Z1$="!   !   !   !   !   !   !                              !   !   !   !
        !   !   !"
0190 Z3$="!   !   !   !   !   !   !   !   !   !      !   !   !   !   !   !   !
        !   !   !"
   : Z4$="!
                !"
0200 REM %^INPUT DATA MEMORY CONFIGURATION................
   : SELECT PRINT /005(80)
   : PRINT HEX(0D03);AT(0,20);BOX(1,37);AT(0,21);"MECI -- Memory Error Chip Id
     entifier"
   : PRINT AT(3,0);"         SIZE","BOARD #1","BOARD #2","BOARD #3","BOARD #4"

   : I=0
   : RESTORE LINE 260
0210 READ S$,S$(1),S$(2),S$(3),S$(4),R$
   : IF S$="end" THEN 220
   : PRINTUSING "SF'##    ",I;
   : PRINT S$,S$(1),S$(2),S$(3),S$(4)
   : I=I+1
   : GOTO 210
0220 PRINT "SF'31","Return to main menu"
   : PRINT
   : PRINT "Enter the data memory configuration, SF'?";HEX(06)
0230 KEYIN S$,,240
   : GOTO 230
0240 IF STR(S$,,1) =HEX(1F) THEN LOAD T"@MENU"
   : ERRORGOTO 180
0245 IF STR(S$,,1) =HEX(1F) THEN LOAD T"@MENU"
   : IF VAL(S$)>=I THEN 230
   : RESTORE LINE 260,6*VAL(S$)+1
   : READ S$,S$(1),S$(2),S$(3),S$(4),R$
0250 REM DATA "memory size","board 1 type","board 2 type","chip row order"
0260 DATA "16K","6787-A  (16K)"," "," "," ","--12----"
   : DATA "32K","6787-1A (32K)"," "," "," ","3412----"
   : DATA "32K","7587-1B (32K)"," "," "," ","---1----"
0270 DATA "48K","6787-1A (32K)","6787-A  (16K)"," "," ","3412--56"
   : DATA "64K","6787-1A (32K)","6787-1A (32K)"," "," ","34127856"
0280 DATA "64K","6787-1A (32K)","7587-1B (32K)"," "," ","3412--5-"
   : DATA "64K","7587-1A (64K)"," "," "," ","--21----"
   : DATA "96K","6787-1A (32K)","7587-1A (64K)"," "," ","3412-65-"
0290 DATA "96K","7587-3B (96K)"," "," "," ","-321----"
   : DATA "128K","6787-1A (32K)","7587-3B (96K)"," "," ","3412765-"
0300 DATA "128K","7587-3A (128K)"," "," "," ","4321----"
   : DATA "160K","7587-3A (128K)","7587-1B (32K)"," "," ","4321---5"
   : DATA "160K","6787-1A (32K)","7587-3A (128K)"," "," ","34127658"
   : DATA "192K","7587-3A (128K)","7587-1A (64K)"," "," ","4321--65"
0310 DATA "256K","7587-3A (128K)","7587-3A (128K)"," "," ","43218765"
   : DATA "512K","7587-3A (128K)","7587-3A (128K)","7587-3A (128K)","7587-3A (
     128K)","43218765"
   : DATA "end"," "," "," "," "," "
0320 REM ^%INPUT CONTROL MEMORY CONFIGURATION.............
   : SELECT PRINT /005(80)
   : PRINT AT(2,0,)
   : PRINT
   : PRINT "         SIZE","BOARD #1","BOARD #2"
   : I=0
   : RESTORE LINE 370
0330 READ M$,M$(1),M$(2),R1$
   : IF M$="end" THEN 340
   : PRINTUSING "SF'##    ",I;
   : PRINT ; M$,M$(1),M$(2)
   : I=I+1
   : GOTO 330
0340 PRINT
   : PRINT "Enter the control memory configuration, SF'?";
0350 KEYIN M$,,360
   : GOTO 350
0360 IF STR(M$,,1)  =HEX(1F) THEN 180
   : IF VAL(M$)>=I THEN 350
   : RESTORE LINE 370,4*VAL(M$)+1
   : READ M$,M$(1),M$(2),R1$
0370 REM DATA "memory size","board 1 type","board 2 type","chip row order"
   : DATA "16K","6788-A  (8K)","6788-A  (8K)","12-43-"
   : DATA "16K","7588-A  (16K)"," ","-1----"
0380 DATA "20K","6788-1A (12K)","6788-A  (8K)","12543-"
   : DATA "24K","6788-1A (12K)","6788-1A (12K)","125436"
   : DATA "32K","7588-1A (32K)"," ","21----"
   : DATA "64K","7588-1A (32K)","7588-1A (32K)","21-43-"
   : DATA "end"," "," "," "
0390 REM %^INPUT SYSTEM ERROR..................................
   : REM EXIT -- E=ERR TYPE (1=AECM,2=BECM,3=PECM,4=VECM,5=AEDM,6=BEDM,7=PEDM,
     8=REDM,9=VEDM)
   : REM      -- E$=ERR MNEMONIC (EG, PEDM)
   : REM      -- A$=BINARY ADDRESS
   : REM      -- D$=BINARY DATA (IF ANY)
0400 REM      -- A2$=BINARY ADDRESS OF CONFLICT LOCATION (ADDRESSING ERRORS)
   : REM
0410 PRINT HEX(0D03);"Edit SYSTEM ERROR.          SYSTEM ERROR (
                  )"
   : E$="PECM"
   : T=42
0420 REM ERROR TYPE
   : PRINT AT(0,T);
   : LINPUT ?-E$
   : MAT SEARCH "AECMBECMPECMVECMAEDMBEDMPEDMREDMVEDM",=STR(E$) TO L$ STEP 4
   : IF L$=HEX(0000) THEN 420
   : E=INT(VAL(L$,2)+3)/4
   : T=T+5
0430 REM ADDRESS
   : A1$=ALL("0")
   : GOSUB 480
   : HEXPACK A$ FROM STR(A1$,4)
   : P$=A1$
   : IF STR(E$,,1)<>"A" THEN 440
   : GOSUB 480
   : HEXPACK A2$ FROM STR(A1$,4)
   : P2$=A1$
0440 REM DATA
   : T$=HEX(060606000404000200)
   : L=VAL(STR(T$,E))
   : IF L=0 THEN 470
   : D1$=ALL("0")
0450 IF STR(E$,3,2)<>"DM" OR E$="REDM" THEN 460
   : PRINT AT(2,T-2);BOX(0,4); AT(1,T-5);"even  "; BOX(1,0);" ";BOX(1,0);" ";
     BOX (1,0);" ";BOX(1,0);"   odd";AT(2,T+3);BOX(0,4);
0460 PRINT AT(0,T);
   : LINPUT ?-STR(D1$,,L)
   : IF VER(D1$,"HHHHHH")<>6 THEN 450
   : HEXPACK D$FROM D1$
0470 REM DONE EDIT
   : PRINT AT(0,0,18)
   : ON E GOTO 520,560,570,700,710,770,780,790,810
   : STOP "SHOULD NEVER GET HERE"#
0480 REM ADDRESS
   : REM ENTRY -- E$ = ERR MNEMONIC
   : REM EXIT  -- A1$ = ASCII ADDRESS (RIGHT JUSTIFIED)
   : IF STR(E$,3,1)="D" THEN 500
0490 REM CONTROL MEMORY ADDRESS
   : PRINT AT(0,T);
   : LINPUT ?-STR(A1$,4)
   : IF VER(STR(A1$,4),"HHHH")<>4 THEN 490
   : T=T+5
   : RETURN
0500 REM DATA MEMORY ADDRESS
   : STR(A1$,3,1)="."
   : PRINT AT(0,T);
   : LINPUT ?-STR(A1$,1,3)
   : PRINT AT(0,(T+3));
   : LINPUT "."? -STR(A1$,4,4)
   : IF VER(STR(A1$),"HHHH   ")<>7 THEN 510
   : MAT COPY -STR(A1$,,4) TO -STR(A1$)
   : STR(A1$,,3)="00."
0510 IF VER(A1$,"H0.HHHH")<>7 OR POS("048C26AE"=STR(A1$,1,1))=0 THEN 500
   : PRINT AT(0,T+1,8); A1$;
   : T=T+8
   : RETURN
0520 REM %AECM....................................
   : REM WHICH BOARD(S)?
   : GOSUB '57(A2$)
   : B2=B
   : Q2=Q
   : GOSUB '57(A$)
   : REM CHECK FOR ADDRESSING ERROR WITHIN CHIP
   : IF Q=Q2 THEN 560
0530 PRINT AT(0,0);
   : IF B=B2 THEN PRINT "Error in board";B
   : ELSE PRINT "Error in boards";B;"&";B2
0540 PRINT AT(4,0);"Writing to location ";HEXOF(A2$);" seems to modify locatio
     n ";HEXOF(A$);" bits ";HEXOF(D$)
0550 PRINT
   : PRINT "or the following chip failure may have occured:"
   : PRINT "     BECM ";HEXOF(A$);" ";HEXOF(D$)
   : GOTO 690
0560 REM %BECM....................................
   : X$=D$
   : GOTO 620
0570 REM %PECM....................................
   : REM GET DISK FILE TO COMPARE WITH
   : PRINT AT(2,0);"Disk file to compare instruction with (";HEX(222022);" if
     none):";
   : LINPUT ?-F$
   : IF F$<>" " THEN 580
   : X$=ALL(FF)
   : GOTO 620
0580 PRINT AT(3,0);
   : LINPUT "              Disk address (/310,/B10,/320 OR /B20):"?-F1$
   : MAT SEARCH "/310/B10/320/B20",=STR(F1$) TO L$
   : IF L$=HEX(0000) THEN 580
   : ON (VAL(L$,2)+3)/4 SELECT #1/310;#1/B10;#1/320;#1/B20
0590 LIMITS T#1,F$,F1,F2,F3,F4
   : ERRORPRINT "DISK ERROR";ERR
   : GOTO 570
0600 IF F4=2 THEN 610
   : PRINT "FILE NOT ON DISK"
   : GOTO 570
0610 REM SEARCH DISK FILE
   : GOSUB '52(A$)
   : IF F6$="FOUND" THEN X$=D$ XOR F5$
   : ELSE X$=ALL(FF)
   : PRINT AT(1,33,210);
   : IF F6$="FOUND" THEN PRINT "XOR with disk file  ";HEXOF(X$)
   : ELSE PRINT "Instruction not in disk file."
0620 REM WHICH BOARD? ROW?
   : GOSUB '57(A$)
   : Q=MOD(Q-1,3)
   : PRINT AT(0,0);
   : IF B=3 THEN PRINT "Error in bootstrap."
   : IF B=1 OR B=2 THEN PRINT "Error in ";STR(M$(B),,4);",Board";B
   : ELSE GOTO 690
0630 REM WHICH CHIPS?
   : GOSUB '53(X$,24)
0640 REM DISPLAY BOARD
   : IF STR(M$(B),,4)="6788" THEN GOSUB '54(6)
   : ELSE GOSUB '54(4)
   : FOR I=1 TO 24
   : IF C$(I)<>"E" THEN 680
   : IF G$="Y" THEN GOTO 660
   : PRINT AT(3*(INT((I-1)/12)+Q*2)+3,4*MOD(I-1,6)+1+55*INT(MOD(I-1,12)/6));"(
     X)"
0650 PRINT AT(3*(INT((I-1)/12)+Q*2)+4,4*MOD(I-1,6)+1+55*INT(MOD(I-1,12)/6));"(
     X)";
   : GOTO 680
0660 PRINT AT(3*(INT((I-1)/12)+Q*2)+3,3*MOD(I-1,6)+2+59*INT(MOD(I-1,12)/6));HE
     X(020402020E);" "
0670 PRINT AT(3*(INT((I-1)/12)+Q*2)+4,3*MOD(I-1,6)+2+59*INT(MOD(I-1,12)/6));"
     ";HEX(0F)
0680 NEXT I
0690 KEYIN K$,,180
   : GOTO 390
0700 REM %VECM....................................
   : X$=HEX(FFFFFF)
   : GOTO 620
0710 REM %AEDM....................................
0720 REM WHICH BOARD(S)?
   : GOSUB '56(P2$,A2$)
   : P2$=P9$
   : B2=B
   : Q2=Q
   : GOSUB '56(P$,A$)
   : P$=P9$
0730 REM CHECK FOR ADDRESSING ERROR WITHIN CHIP
   : IF Q<>Q2 THEN 740
   : T$=A$ XOR A2$ AND HEX(0001)
   : IF STR(T$,,2)=HEX(0000) THEN 770
0740 PRINT AT(0,0);
   : IF B=B2 THEN PRINT "Error in board";B
   : ELSE PRINT "Error in boards";B;"&";B2
0750 PRINT AT(4,0);"Writing to location ";P2$;"0.";HEXOF(A2$);" seems to modif
     y location ";P$;"0.";HEXOF(A$);" bits ";HEXOF(STR(D$,,2))
0760 PRINT
   : PRINT "or the following chip failure may have occured:"
   : PRINT "     BEDM ";P$;"0.";HEXOF(A$);" ";HEXOF(STR(D$,,2))
   : GOTO 900
0770 REM %BEDM....................................
   : IF STR(D$,,2)<>HEX(0000) THEN X$=STR(D$,,2) & HEX(00)
   : ELSE X$=HEX(0000C0)
   : GOTO 800
0780 REM %PEDM....................................
   : X$=HEX(FFFFC0)
   : GOTO 820
0790 REM %REDM....................................
   : IF STR(D$,,1)<>HEX(00) THEN X$=STR(D$,,1) & HEX(0000)
   : ELSE X$=HEX(00FFC0)
0800 REM CHECK FOR EVEN/ODD ADDRESS
   : REM THIS IF WILL CAUSE THE ERROR DATA TO REVERSE ON ODD ADDRESS  IF MOD(V
     AL(STR(A$,2)),2)=1 THEN 820
   : X1$=STR(X$,2,1) & STR(X$,,1)
   : STR(X$,,2)=X1$
   : GOTO 820
0810 REM %VEDM....................................
   : X$=HEX(FFFFC0)
0820 REM WHICH BOARD? ROW?
   : GOSUB '56(P$,A$)
   : PRINT AT(0,0);"Error in ";STR(S$(B),,4);",Board";B
   : Q=MOD(Q-1,4)
0830 REM WHICH CHIPS?
   : GOSUB '53(X$,18)
0840 REM DISPLAY BOARD
   : GOSUB '55(4)
   : FOR I=1 TO 18
   : IF C$(I)<>"E" THEN 890
   : L=I-2
   : IF I>10 THEN L=L+1
   : IF I=1 THEN L=9
   : IF I=2 THEN L=18
0850 IF G$<>"Y" THEN 870
   : PRINT AT(3*Q+4,3*MOD(L-1,9)+2+50*INT((L-1)/9));HEX(06020402020E);" ";
0860 PRINT AT(3*Q+5,3*MOD(L-1,9)+2+50*INT((L-1)/9));" ";HEX(0F);
   : GOTO 890
0870 PRINT AT(3*Q+5,4*MOD(L-1,9)+1+43*INT((L-1)/9));"(X)";
0880 PRINT AT(3*Q+6,4*MOD(L-1,9)+1+43*INT((L-1)/9));"(X)";
0890 NEXT I
0900 KEYIN K$,,390
   : GOTO 390
0910 REM %FIND INSTRUCTION IN DISK FILE..........................
   : REM ENTRY -- L$=INSTRUCTION ADDRESS
0920 DEFFN'52 (L$)
   : FOR S=F1+F3-3 TO F1 STEP -1
   : DATA LOAD DA T#1,(S) F2$,F3$,F$()
   : F4$=F3$ ADDC STR(F3$,3,1)
   : IF STR(F2$,2,1)=HEX(03) AND L$>=STR(F3$,,2) AND L$<F4$ THEN 930
   : NEXT S
   : F6$="NOT FOUND"
   : RETURN
0930 F4$=L$ SUBC STR(F3$,,2)
   : F5$=STR(F$(),VAL(F4$,2)*3+1,3)
   : F6$="FOUND"
   : RETURN
0940 REM %FIND BAD CHIPS.................................
   : REM ENTRY -- C$ = XOR OF DATA
   : REM       -- C = 8 OR 24 (BIT)
   : REM EXIT  -- C$(I) ="E" IFF BAD CHIP (I=1-18 OR 24)
0950 DEFFN'53(C$,C)
   : C$()=" "
   : FOR I=C TO 1 STEP -1
   : IF C$>=HEX(800000) THEN C$(I)="E"
   : ROTATEC (C$,1)
   : NEXT I
   : RETURN
0960 REM %^DISPLAY CONTROL MEMORY BOARD.........................
   : REM ENTRY-- X=no. of chip rows on board
   : REM
0970 DEFFN'54(X)
   : PRINT AT(2,0);HEX(06);
   : IF G$="Y" THEN GOTO 2000
   : FOR I=1 TO X
   : PRINT Z$,Z1$,Z1$
   : NEXT I
   : PRINT Z4$,Z4$
   : SELECT PRINT /005(0)
   : PRINT Z2$
   : SELECT PRINT /005(80)
   : RETURN
0980 REM %DISPLAY DATA MEMORY BOARD.........................
   : REM ENTRY  X = numnber of chip rows on the board
0990 DEFFN'55(X)
   : IF G$="Y" THEN GOTO 2100
   : PRINT AT(4,0);HEX(06);
   : FOR I=1 TO 4
   : PRINT Z$,Z3$,Z3$
   : NEXT I
   : PRINT Z4$,Z4$
1000 SELECT PRINT /005(0)
   : PRINT Z2$
   : SELECT PRINT /005(80)
   : RETURN
1010 REM %^FIND DM BOARD & ROW........................
   : REM ENTRY-- P9$=page (0,4,8,C)
   : REM         A9$=address
   : REM  EXIT-- B=board (1 or 2)
   : REM         Q=row (1-8)
   : REM
1020 DEFFN'56(P9$,A9$)
   : REM WHICH BOARD?
   : IF A9$<HEX(2000) THEN P9$="0"
   : Q=INT(VAL(A9$)/4)+64*(POS("048C26AE"=P9$)-1)+1
   : CONVERT STR(S$,,LEN(S$)-1) TO X
   : IF Q<=X THEN 1040
1030 PRINT AT(5,0);"Invalid address -- not within specified memory configurati
     on."
   : RETURN  CLEAR  ALL
   : GOTO 690
1040 B=1
   : IF STR(S$(1),1,4)="6787" AND Q>32 THEN B=2
   : IF STR(S$(1),1,4)="7587" AND Q>128 THEN B=2
   : IF STR(S$(1),1,4)="7587" AND Q>256 THEN B=3
   : IF STR(S$(1),1,4)="7587" AND Q>384 THEN B=4
1050 REM DETERMINE CHIP ROW (1-8)
   : IF B=2 AND STR(S$(1),1,4)="6787"THEN Q=Q-32
   : IF B=2 AND STR(S$(1),1,4)="7587"THEN Q=Q-128
   : IF B=3 AND STR(S$(1),1,4)="7587"THEN Q=Q-256
   : IF B=4 AND STR(S$(1),1,4)="7587" THEN Q=Q-384
1060 IF STR(S$(B),1,4)="6787"THEN Q=INT((Q+7)/8)
   : ELSE Q=INT((Q+31)/32)
   : IF B=2 THEN Q=Q+4
   : IF B=4 THEN Q=Q+4
   : CONVERT Q TO Q$,(#)
   : Q=POS(R$=Q$)
   : RETURN
1070 REM %^FIND CM BOARD & ROW........................
   : REM ENTRY-- A9$=address
   : REM  EXIT-- B=board (1,2 or 3)
   : REM         Q=row (1-6)
   : REM
1080 DEFFN'57(A9$)
   : REM WHICH BOARD?
   : B=3
   : Q=INT(VAL(A9$)/16)+1
   : IF A9$>=HEX(8000) AND A9$<HEX(8400) THEN RETURN
   : CONVERT STR(M$,,LEN(M$)-1) TO X
   : IF Q*4>X THEN 1030
   : B=1
   : IF STR(M$(1),,4)="7588" THEN 1100
   : IF Q=3 OR Q=4 OR Q=6 THEN B=2
1090 REM WHICH ROW?
   : CONVERT Q TO Q$,(#)
   : Q=POS(R1$=Q$)
   : RETURN
1100 CONVERT INT((Q-1)/4)+1 TO Q$,(#)
   : IF Q$="3" OR Q$="4" THEN B=2
   : Q=POS(R1$=Q$)
   : RETURN
2000 REM %^DISPLAY CONTROL MEMORY BOARD WITH GRAPHICS
   : REM ENTRY X = number of chip rows on the board
2010 PRINT AT(2,0,); BOX(0,79);
2020 FOR I=1 TO X
   : PRINT HEX(0D); BOX(3,0);" ";HEX(0A);
   : FOR I1=1 TO 2
   : FOR I2=1 TO 6
   : PRINT BOX(2,2);I2;
   : NEXT I2
   : IF I1=1 THEN PRINT TAB(60);
   : NEXT I1
   : PRINT " ";HEX(0C); BOX(3,0);HEX(0A0A)
   : NEXT I
2030 IF X>=6 THEN GOTO 2200
   : FOR I=X TO 6
   : PRINT BOX (2,0); TAB(79); BOX(2,0); HEX(0A)
   : NEXT I
   : GOTO 2200
2100 REM %DISPLAY DATA MEMORY BOARD WITH GRAPHICS
   : REM ENTRY X = number of chip rows on the board
2110 PRINT AT(3,0,); BOX(0,79);
2120 FOR I=1 TO X
   : PRINT HEX(0D); BOX(3,0);" ";HEX(0A);
   : FOR I1=1 TO 2
   : FOR I2=1 TO 9
   : PRINT BOX(2,2);
   : IF I2=9 THEN PRINT " P ";
   : ELSE PRINT I2;
   : NEXT I2
   : IF I1=1 THEN PRINT TAB(51);
   : NEXT I1
   : PRINT " ";HEX(0C); BOX(3,0);HEX(0A0A)
   : NEXT I
2130 IF X>=6 THEN GOTO 2200
   : FOR I=X+1 TO 6
   : PRINT BOX (2,0); TAB(79); BOX(2,0); HEX(0A)
   : NEXT I
   : GOTO 2200
2200 REM % DRAW BOTTOM OF BOARD
   : PRINT BOX(1,0);TAB(79); BOX(1,0)
2210 PRINT BOX(0,1); " "; BOX(2,0); HEX(0A0A); BOX(0,26); TAB(27); HEX(0C0C);
     BOX(2,0); BOX(0,3); TAB(30); BOX(2,0); HEX(0A0A); BOX(0,26); TAB(56); HEX
     (0C0C); BOX(2,0); BOX(0,3); TAB(59); BOX(2,0); HEX(0A0A); BOX(0,19); TAB(
     78); HEX(0C0C); BOX(2,0); BOX(0,1);
2220 RETURN
2500 STOP " DONE"
8000 REM %^SAVE FILE..........................
   : SCRATCH T"MECI"
   : SAVE T()"MECI"
   : STOP "SAVED MECI"
   : REM %
9000 REM %LIST...............................
   : SELECT LIST /215(132)
   : LIST "MECI"D
   : LIST "MECI"V
   : LIST "MECI"#
   : LIST '
   : SELECT LIST /005(80)